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

Armor models: изменяется FPS модели  [Решено]

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

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

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

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

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

Armor models: изменяется FPS модели

Сообщение Eternal » 19 июн 2017, 14:32

Всех приветствую! Насмотрелся на плагин "Оружия за спиной" и у меня появилась идея сделать бронежилеты видимыми когда они есть на игроке. Amxx конкретно фигово владею так что импровизирую поиском подобных плагинов или скрещиваю логически 2 в 1. Вот что получается:

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>

new const KEVLAR[] = { "models/w_kevlar.mdl" }
new MODEL[] = "models/helm.mdl";
new modelname[9][] = { "gign","gsg9","sas","urban","vip","arctic","guerilla","leet","terror" };

new g_Ent[33];
new cvar_on;

public plugin_init()
{
    register_plugin("Armor models", "999", "noname");
    
    register_event
("DeathMsg", "Remove", "d");
    register_logevent("Remove", 2, "1=Round_End");
    
    cvar_on 
= register_cvar("hm_remove_model_Round_End","1")
    
    register_forward
(FM_Touch, "fw_Touch")
}
public client_disconnect(id)
{
    remove_entity(g_Ent[id]);
}
public BuyHelm(id)
{
    
    if
(is_user_alive(id))
    {    
        g_Ent
[id] = create_entity("info_target");
        entity_set_int(g_Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW);
        entity_set_edict(g_Ent[id], EV_ENT_aiment, id);
        entity_set_model(g_Ent[id], MODEL);
    }
    else
    
{
        remove_entity(g_Ent[id]);
    }
    return PLUGIN_CONTINUE;
}

public Remove()
{
    if(get_pcvar_num(cvar_on) == 1)
    {    
        new death 
= read_data(2);
        remove_entity(g_Ent[death]);
    }
    return PLUGIN_CONTINUE;
}
public get_model_id(id)
{
    new modelStr[32], iNum=32, modelID;
    get_user_info(id,"model",modelStr,iNum);
    
    for
(new i = 0; i < 9; i++)
    {
        if (equali(modelStr, modelname[i])) 
        
{
            modelID = i;
        }
    }
    return modelID;
}
public plugin_precache()
{
    precache_model(MODEL);
    
    force_unmodified
(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gign/gign.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gsg9/gsg9.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/sas/sas.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/urban/urban.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/vip/vip.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/arctic/arctic.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/guerilla/guerilla.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/leet/leet.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/terror/terror.mdl");    
}

public fw_Touch(ent, id)

{
        if (!is_user_alive(id) || !pev_valid(ent))

                return FMRES_IGNORED

        static szEntModel
[32]

        pev(ent, pev_model, szEntModel, 31)

        if (equali(szEntModel, KEVLAR))
    {
          set_task(0.1, "BuyHelm", id);  
        
}
 return FMRES_IGNORED

При покупки "шлема" или "бронежилета с шлемом" появляется у игроков моделька в виде каски. Всё вроде бы отлично и идея удалась, но нет модельки не стандартных игроков да и стандартные начинают "косплеить флэша" fps анимации подскакивает чуть ли не в двое.
Так же при возрождении каска не пропадает, а хотелось бы что бы пропадала.
Подскажите пожалуйста где что не так в скрипте. Заранее спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

Re: Armor models: изменяется FPS модели

Сообщение Subb98 » 19 июн 2017, 14:42

Eternal писал(а):fps анимации подскакивает чуть ли не в двое.

Всё дело в реализации: когда вы создаёте объект (entity) и говорите ей следовать за игроком (MOVETYPE_FOLLOW), то это создаёт определённую нагрузку. Следовательно, влияет на FPS.

Eternal писал(а):Так же при возрождении каска не пропадает, а хотелось бы что бы пропадала.

При возрождении изменяйте видимость entity (делайте модель невидимой). Когда игрок купит бронежилет и шлем - возвращайте прежнее значение.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Armor models: изменяется FPS модели  [Решено]

Сообщение NEoMASTERR » 19 июн 2017, 16:38

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

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

new const KEVLAR[] = { "models/w_kevlar.mdl" }
new const 
MODEL[] = "models/helm.mdl";
new const 
g_HelmetClassname[] = "helmet"
new modelname[9][] = { "gign","gsg9","sas","urban","vip","arctic","guerilla","leet","terror" };

new 
g_Ent[MAX_PLAYERS+1];
new 
cvar_on;

public 
plugin_init()
{
    
register_plugin("Armor models""999""noname");

    
RegisterHam(Ham_Killed"player""ham_killed"true)
//    register_logevent("event_round_end", 2, "1=Round_End");        // не совсем понял что это

    
cvar_on register_cvar("hm_remove_model_Round_End","1")

    
register_forward(FM_Touch"fw_Touch")
}

#if AMXX_VERSION_NUM < 183
public client_disconnect(id)
#else
public client_disconnected(id)
#endif
{
    
remove_helmet(g_Ent[id]);
}

public 
BuyHelm(id)
{
    if(
is_user_alive(id))
    {
        if (
g_Ent[id]) return PLUGIN_CONTINUE
        
static ent; if ((ent create_entity("info_target")))
        {
            
entity_set_string(entEV_SZ_classnameg_HelmetClassname)
            
entity_set_int(entEV_INT_movetypeMOVETYPE_FOLLOW);
            
entity_set_edict(entEV_ENT_aimentid);
            
entity_set_model(entMODEL);
            
entity_set_float(entEV_FL_framerate1.0);
            
g_Ent[id] = ent;
        }
    }
    return 
PLUGIN_CONTINUE;
}

public 
event_round_end()
{
    if (!
get_pcvar_num(cvar_on)) return PLUGIN_CONTINUE
    
static pl[MAX_PLAYERS], numiget_players(plnum"ah")
    for (
0num; ++i)
    {
        
remove_helmet(g_Ent[pl[i]])
    }
    return 
PLUGIN_CONTINUE
}

public 
ham_killed(idpidsh)
{
    if(
get_pcvar_num(cvar_on))
        
remove_helmet(g_Ent[id]);
    
    return 
HAM_IGNORED
}

public 
get_model_id(id)
{
    new 
modelStr[32], iNum=32modelID;
    
get_user_info(id,"model",modelStr,iNum);
    
    for(new 
09i++)
    {
        if (
equali(modelStrmodelname[i])) 
        {
            
modelID i;
        }
    }
    return 
modelID;
}

public 
plugin_precache()
{
    
precache_model(MODEL);
    
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gign/gign.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gsg9/gsg9.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/sas/sas.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/urban/urban.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/vip/vip.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/arctic/arctic.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/guerilla/guerilla.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/leet/leet.mdl");
    
force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/terror/terror.mdl");    
}

public 
fw_Touch(entid)
{
    if (!
is_user_alive(id) || !is_valid_ent(ent)) return FMRES_IGNORED
    
static model[33]; entity_get_string(entEV_SZ_modelmodelcharsmax(model))
    if (
equali(modelKEVLAR)) BuyHelm(id)
    return 
FMRES_IGNORED


remove_helmet(&ent)
{
    if (
is_valid_ent(ent)) entity_set_int(entEV_INT_flagsentity_get_int(entEV_INT_flags) | FL_KILLME)
    
ent 0
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Armor models: изменяется FPS модели

Сообщение Eternal » 19 июн 2017, 17:00

NEoMASTERR писал(а):
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif

new const KEVLAR[] = { "models/w_kevlar.mdl" }
new const MODEL[] = "models/helm.mdl";
new const g_HelmetClassname[] = "helmet"
new modelname[9][] = { "gign","gsg9","sas","urban","vip","arctic","guerilla","leet","terror" };

new g_Ent[MAX_PLAYERS+1];
new cvar_on;

public plugin_init()
{
    register_plugin("Armor models", "999", "noname");

    RegisterHam(Ham_Killed, "player", "ham_killed", true)
//    register_logevent("event_round_end", 2, "1=Round_End");        // не совсем понял что это

    cvar_on = register_cvar("hm_remove_model_Round_End","1")

    register_forward(FM_Touch, "fw_Touch")
}

#if AMXX_VERSION_NUM < 183
public client_disconnect(id)
#else
public client_disconnected(id)
#endif
{
    remove_helmet(g_Ent[id]);
}

public BuyHelm(id)
{
    if(is_user_alive(id))
    {
        if (g_Ent[id]) return PLUGIN_CONTINUE
        static ent
; if ((ent = create_entity("info_target")))
        {
            entity_set_string(ent, EV_SZ_classname, g_HelmetClassname)
            entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW);
            entity_set_edict(ent, EV_ENT_aiment, id);
            entity_set_model(ent, MODEL);
            entity_set_float(ent, EV_FL_framerate, 1.0);
            g_Ent[id] = ent;
        }
    }
    return PLUGIN_CONTINUE;
}

public event_round_end()
{
    if (!get_pcvar_num(cvar_on)) return PLUGIN_CONTINUE
    static pl
[MAX_PLAYERS], num, i; get_players(pl, num, "ah")
    for (= 0; i < num; ++i)
    {
        remove_helmet(g_Ent[pl[i]])
    }
    return PLUGIN_CONTINUE
}

public ham_killed(id, pid, sh)
{
    if(get_pcvar_num(cvar_on))
        remove_helmet(g_Ent[id]);
    
    return HAM_IGNORED
}

public get_model_id(id)
{
    new modelStr[32], iNum=32, modelID;
    get_user_info(id,"model",modelStr,iNum);
    
    for
(new i = 0; i < 9; i++)
    {
        if (equali(modelStr, modelname[i])) 
        
{
            modelID = i;
        }
    }
    return modelID;
}

public plugin_precache()
{
    precache_model(MODEL);
    
    force_unmodified
(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gign/gign.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/gsg9/gsg9.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/sas/sas.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/urban/urban.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/vip/vip.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/arctic/arctic.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/guerilla/guerilla.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/leet/leet.mdl");
    force_unmodified(force_model_samebounds,{0,0,0},{0,0,0},"models/player/terror/terror.mdl");    
}

public fw_Touch(ent, id)
{
    if (!is_user_alive(id) || !is_valid_ent(ent)) return FMRES_IGNORED
    static model
[33]; entity_get_string(ent, EV_SZ_model, model, charsmax(model))
    if (equali(model, KEVLAR)) BuyHelm(id)
    return FMRES_IGNORED
} 

remove_helmet
(&ent)
{
    if (is_valid_ent(ent)) entity_set_int(ent, EV_INT_flags, entity_get_int(ent, EV_INT_flags) | FL_KILLME)
    ent = 0
}

Спасибо
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

Re: Armor models: изменяется FPS модели

Сообщение NEoMASTERR » 19 июн 2017, 17:20

Подъём кевлара лучше привести под Вы должны зарегистрироваться, чтобы видеть ссылки.
Код: Выделить всё
public plugin_init( ) 
{
    
//..
    
register_touch("armoury_entity""player""fw_Touch");
}

public 
fw_Touch(entid
{
    if(!
is_user_aliveid )) return PLUGIN_CONTINUE;    
    static 
tcs_get_armoury_type(ent);    
    if( 
== CSW_VEST || == CSW_VESTHELM BuyHelm(id)    
    return 
PLUGIN_CONTINUE;
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Armor models: изменяется FPS модели

Сообщение Eternal » 19 июн 2017, 18:51

NEoMASTERR писал(а):Подъём кевлара лучше привести под Вы должны зарегистрироваться, чтобы видеть ссылки.
Код: Выделить всё
public plugin_init( ) 
{
    //..
    register_touch("armoury_entity", "player", "fw_Touch");
}

public fw_Touch(ent, id) 
{
    if(!is_user_alive( id )) return PLUGIN_CONTINUE;    
    static t
; t = cs_get_armoury_type(ent);    
    if
( t == CSW_VEST || t == CSW_VESTHELM ) BuyHelm(id)    
    return PLUGIN_CONTINUE
;
}

RegisterHam(Ham_Killed, "player", "ham_killed", true)
А есть ещё способ подключить функцию отлова убийства?
Например если использовать
register_event("DeathMsg", "onDeath", "a")
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

Re: Armor models: изменяется FPS модели

Сообщение Kaido Ren » 19 июн 2017, 18:53

Eternal, это самый верный способ. Чем конкретно он тебя не устроил?
Аватара пользователя
Kaido Ren
 
Сообщения: 56
Зарегистрирован: 20 апр 2016, 18:17
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 15 раз.

Re: Armor models: изменяется FPS модели

Сообщение Eternal » 19 июн 2017, 19:00

Kaido Ren писал(а):Eternal, это самый верный способ. Чем конкретно он тебя не устроил?

Способ то устраивает, но проблемы с модулем hamsandwich у меня на сервере. Побывал много способов результата не добился.
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

Re: Armor models: изменяется FPS модели

Сообщение NEoMASTERR » 19 июн 2017, 19:11

Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Armor models: изменяется FPS модели

Сообщение Eternal » 19 июн 2017, 19:35

NEoMASTERR писал(а):Скачать актуальный Вы должны зарегистрироваться, чтобы видеть ссылки. или Вы должны зарегистрироваться, чтобы видеть ссылки. и закинуть в папку с модулями

всё теперь отлично можно не замарачиваться ;)
Аватара пользователя
Eternal
 
Сообщения: 24
Зарегистрирован: 23 янв 2017, 08:49
Благодарил (а): 11 раз.
Поблагодарили: 1 раз.
Языки программирования: Php

След.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 7

cron