BLOG | Вопросы от MayroN'а | и не только...

Сообщения
1,015
Реакции
818
Помог
10 раз(а)
MayroN, на своем примере покажу, как делал, хотя там тоже недочет есть, но я забыл какой :D

1 Плагин, где зарегистрирован натив
Код:
public plugin_natives( )
{
    register_native( "native_VoiceManager_IsPlayerMuteVoice", "native_VoiceManager_IsPlayerMuteVoice", .style = false );
}

public native_VoiceManager_IsPlayerMuteVoice( iPluginID, iParamCount )
{
    new id = get_param( 1 );
   
    new iTargetID = get_param( 2 );
   
    return g_bPlayerMuteVoice[ id ][ iTargetID ];
}
2 Плагин
Код:
native native_VoiceManager_IsPlayerMuteVoice( id, iTargetID );

// Где то в цикле
new iIsPlayerMuteVoice = native_VoiceManager_IsPlayerMuteVoice( id, iTargetID );
Возвращать тебе ничего не надо, тебе просто надо вызвать натив, сможешь разобраться?
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Javekson,
Да вот как раз возвращать нужно...
Я абсолютно впервые с нативом сталкиваюсь,поэтому "дуб" ?

Ну если ещё так попробовать...хз
Код:
public plugin_natives()
{
    register_native("backweapons", "bacon_item_attachtoplayer_post", 1);
}
Потом - 2 плагин
native backweapons(ent, id)

И там в голограме как? ( ведь bacon_item_attachtoplayer_post = ent, id )
backweapons(ent, id)
set_user_rendering(id, kRenderFxDistort, 0, 0, 0, kRenderTransAdd, 127)
 
Сообщения
934
Реакции
186
Помог
4 раз(а)
MayroN, Надо сначала получить параметры, а потом return использовать в нативе.
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Кстате,а каким образом спрайт размером 32х32 ,который закреплён по Create_TE_PLAYERATTACHMENT в игре увеличиваеться в раза на 3 больше своего размера ?
Scale у его нету,следуя стоку
Код:
stock Create_TE_PLAYERATTACHMENT(id, entity, vOffset, iSprite, life){

    message_begin( MSG_ONE, SVC_TEMPENTITY, { 0, 0, 0 }, id )
    write_byte( TE_PLAYERATTACHMENT )
    write_byte( entity )     // entity
    write_coord( vOffset )   // vertical offset ( attachment origin.z = player origin.z + vertical offset )
    write_short( iSprite )   // model index
    write_short( life )      // (life * 10 )
    message_end()
}
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
По клавише Чата вызываеться игроку модель над головой
Код:
public Start_Model_ChatIntro(id)
{
    g_b_PlayerInChat[id] = true
    
    Enable_Chat_Model(id)
    
    if (g_h_PlayerPostThink[id])
        EnableHamForward(g_h_PlayerPostThink[id])
    else
        g_h_PlayerPostThink[id] = RegisterHamFromEntity(Ham_Player_PostThink, id, "Player_Moving", 1)
    
    return PLUGIN_HANDLED
}
Далее,когда игрок нажал Esc и сделал любое движение / нажал кнопку мыши и.т.п. - модель исчезает
Код:
public Player_Moving(id)
{
    static i_Buttons
    
    i_Buttons = pev(id, pev_button)
    
    if (i_Buttons)
        Disable_Chat_Model(id)
Я вот бы хотел,что-бы она сразу закрывалась после нажатия кнопки Esc и сделал такие 2 Варианта и они не работают - почему?
Код:
    1 Вариант
    static i_Buttons
    
    i_Buttons = pev(id, pev_button)
    
    if (i_Buttons & IN_CANCEL)
        Disable_Chat_Model(id)
        
    2 Вариант   
    new button = pev(id, pev_button)
    new oldbutton = pev(id, pev_oldbuttons)
    
    if(oldbutton & IN_CANCEL && !(button & IN_CANCEL))
    {
        Disable_Chat_Model(id)
    }
 
Сообщения
1,668
Реакции
1,493
Помог
24 раз(а)
Кто такой IN_CANCEL
 
Сообщения
579
Реакции
338
Предупреждения
1
Помог
9 раз(а)
Сообщения
1,668
Реакции
1,493
Помог
24 раз(а)
и как, ловится?
 
Сообщения
162
Реакции
445
Помог
2 раз(а)
MayroN, нажатие на IN_CANCEL не передается на сервер. Точнее, не попадает в список нажатых клавиш (pev_button).
Хотя, в клиенте даже есть функция, которая должна добавлять IN_CANCEL в список клавиш, но она никогда не вызывается (dead code).
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
MayroN, нажатие на IN_CANCEL не передается на сервер. Точнее, не попадает в список нажатых клавиш (pev_button).
Хотя, в клиенте даже есть функция, которая должна добавлять IN_CANCEL в список клавиш, но она никогда не вызывается (dead code).
Что-же делать-то...
Для меня по задумке больше нет никакого варианта реализации? ?
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Есть спрайт с такими параметрами:

1.jpg

В игре я его вижу жёлтым цветом без чёрного фона в сопровождении такими строками

Код:
    new Float:vecOrigin[3];
    pev(ent, pev_origin, vecOrigin)
        
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0)
    write_byte(TE_FIREFIELD)
    engfunc(EngFunc_WriteCoord, vecOrigin[0])
    engfunc(EngFunc_WriteCoord, vecOrigin[1])
    engfunc(EngFunc_WriteCoord, vecOrigin[2] -= 30.0)
    write_short(2)
    write_short(smoke)
    write_byte(1)
    write_byte(TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA)
    write_byte(10)
    message_end()
Делаю этот же спрайт ровно в 2 раза меньше 48х48 и ставлю такие же параметры ( и Спрайта и Строк )

После этого я вижу его в игре Белым цветом без чёрного фона

Вопрос:
Почему Спрайт теряет цветность в игре ( на Белый цвет ) при уменьшении только всеволишь своего размера?
 
Сообщения
133
Реакции
441
Помог
2 раз(а)
MayroN, В режиме indexalpha спрайт в игре краситься в цвет который последний в политре этого спрайта. А когда ты делаешь в какой-нибудь софтине "уменьшении только всеволишь своего размера", по факту ты меняешь не только размер, ты заново компилишь спрайт, и у тебя уже помимо размера поменялась и палитра цветов. И не важно что мы видим во вьювере спрайтов, цвет в indexalpha режиме определяет последний находящийся в политре, а его плотность (спрайта) градация от светлого к темному.

Например, вот палитра от оригинального файла и от перекомпилированного, и еще рядом поставим последний пиксель палитры с фиолетовым цветом (хотя во вьювере мы видим все тот же желтый спрайт, в игре он будет уже фиолетовым)
HLTextureTools_LCU1LOO9sD.png HLTextureTools_YTmzDDTFCX.png HLTextureTools_lrzM1zC6sL.png
 

Download all Attachments

Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
medusa,
Блин,черт,капец...но СПАСИБО
Невнимательность моя меня и подвела
Я это знал раньше,но вот в спешке и недоумении я был сбит с толку,почему же...

Кстате, а почему тогда формат additivе можно также видеть в игре без чёрного фона с таким же кодом ?

Или там уже меняем
write_byte(TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA)
на
write_byte(50)
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Только спустя 2 месяца обнаружил такой вот нюанс
На видео Вы поймёте, в чём проблема

Подключаемся в игру,игра идёт ,но мы в спектрах ( НЕ возрождаемся ) ,далее следим за игроком,потом переключаем нашу камеру от игрока в свободный полёт и тут на те здрасьте )))

Как закрыть Модель для наблюдателей,или как отслеживать эту камеру не пойму вообще...?

Так появляется только в том случаи,если камеру слежения я снимаю с игрока

Мне сказали,что так должно и быть и решения нет - но я иду до победного )))

P.S. Если уж действительно не решаемо - то видят ли другие игроки эту модель потом на карте?


Код:
#include <amxmodx>
#include <fakemeta>

#define MOTD_MODEL "models/motd/motd_wc.mdl"

new bool:motd[33]

public plugin_init()
{
    register_event("TeamInfo", "Spawn", "a")
}

public plugin_precache()
{
    precache_model(MOTD_MODEL)
}

public client_putinserver(id)
{       
    if (!is_user_bot(id))
        {
        motd[id] = true
        set_pev(id, pev_viewmodel2, MOTD_MODEL)

                set_task(0.1, "Light", id + 5629)
    }
    return PLUGIN_CONTINUE
}

public Light(iTaskID)
{       
        new id = iTaskID - 5629

        new Float:fOrigin[3]
        pev(id, pev_origin, fOrigin)
        
        message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id)
        write_byte(TE_DLIGHT)
        write_coord(floatround(fOrigin[0]))
        write_coord(floatround(fOrigin[1]))
        write_coord(floatround(fOrigin[2]))
        write_byte(100)
        write_byte(0)
        write_byte(0)
        write_byte(0)
        write_byte(2)
        write_byte(0)
        message_end()         

        set_task(0.1, "Light", id + 5629) 
}

public Spawn()
{
    new id = read_data(1)
    static user_team[32]
    
    read_data(2, user_team, 31)
    
    if(!is_user_connected(id))
        return PLUGIN_CONTINUE

        motd[id] = false
        remove_task(id + 5629)

    return PLUGIN_CONTINUE
}

public client_disconnect(id)
{
        motd[id] = false
        remove_task(id + 5629)   
}
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Согласен,что нет.Модель закрывается по истечении времени,далее меню выбора команды и поехали...
Но...мне бы интересно - можно ли закрывать модель по тому принципу,что я написал выше.
Ибо у меня закрытие происходит только после выбора команды
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Есть тут знатоки по HL ?

К примеру блокирую кнопку аттаки в голосовании за карту на 30 секунд
У HL вместо 83 используется 148

Код:
const m_flNextAttack = 148
set_pdata_float(player, m_flNextAttack, 30.0, 5)
Но есть момент,когда тебя убили и происходит вызов голосования ( ты ещё мёртв ), то кнопка не блокируется
Соответственно,если игрок нажмёт аттаку,он возродится и вылезут спрайты жизней,брони...и появляется возможность стрелять ( а эти все дела заблокированы в голосовании )
Как можно кнопку заблокировать для мёртвого игрока?
 
Последнее редактирование:
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Кто нибудь знает способ,как можно проигрывать Анимации правильно,если модель приаттачена к игроку ?

Привожу пример: Тот же плагин Backweapons - где оружие цепляют на спину.
Тоесть если пистолет в руках,а калаш на спине,то модель игрока не просто ходит,а бежит - иными словами скорость анимации ускоряется в раза 2 точно

Мне как-то SISA говорил раньше,когда я ничего не понимал и даже как-то не обращал внимания на это

Вот такими были его слова ( с бодями ещё куда ни шло, - я розберусь,а дальше уже в тупике застряну )
Можно сделать бодигруппу в модели игроков с пустыми бодями и вшить все в _p модель оружия. Она наследует номер боди от игрока, к тому же, она не крепится в виде аттача, следовательно не дает нагрузку и не портит анимацию игрока. Эта реализация, разумеется, простой не будет, но она выполнима.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу