Показ спрайта

Сообщения
316
Реакции
131
Помог
4 раз(а)
Пытаюсь сделать вывод спрайта над головой при выборе любого пункта в меню, пока не очень
Брал куски кода от сюда https://dev-cs.ru/threads/1277/page-3#post-13726
Код:
/*
    wave - client_cmd(id, "spk server/sound.wav")  // client_cmd(id, "stopsound")
    mp3 - client_cmd(id, "mp3 play sound/server/sound.mp3") // client_cmd(id, "mp3 stop")
    info https://amx-x.ru/viewtopic.php?f=9&t=23321
*/
#include <amxmodx>
#include <amxmisc>

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_0

/* ======== SETTINGS ======== */
new FILESPRITE;
#define SHOWTIME 3                            //Сколько секунд будет показываться спрайт
#define SPRITE "sprites/sprite_smiles/roflanChelik.spr"    //Какой спрайт будет отображаться
/* ======== END SETTINGS ======== */

public plugin_init()
{
    register_plugin("Chat Wheel Sounds", "0.1", "alabamaster1337")
        
    register_menu("menu_chatwheel", keys, "func_chatwheel")
    register_concmd("chatwheel", "chatwheelid")
    register_clcmd("chatwheel", "chatwheelid")

    register_event("StatusValue", "func_chatwheel", "be", "1=2", "2!0");
}

public plugin_precache()
{
    precache_sound( "chatwheel/Chat_wheel_2017_charge.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_sad_bone.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_ehto_g_g.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_eto_nenormalno.mp3" )
    precache_model(SPRITE);
}

public chatwheelid(id)
{
    static menu[650], iLen
    iLen = 0
        iLen = formatex(menu[iLen],    charsmax(menu)    - iLen,    "\yЗвуковые насмешки^n")
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wВ Атаку^n")
        keys |= MENU_KEY_1
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wГрустный тромбон^n")
        keys |= MENU_KEY_2
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wПосмотри вокруг^n")
        keys |= MENU_KEY_3
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wЖил до конца^n")
        keys |= MENU_KEY_4
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wЭто ГГ^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wЭто. Просто. нечестно^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wОй-ой-ой, бежать^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wЭто ненормально^n")
        keys |= MENU_KEY_5
    }
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\r0. \rВыход^n")
    keys |= MENU_KEY_0
    
    show_menu(id, keys, menu, -1, "menu_chatwheel");
    return PLUGIN_HANDLED
}

public func_chatwheel(id, key)
{
    // хотел сделать что-то типа вывода НИК ИГРОКА -> ТЕКСТ, но пойдет и client_cmd id
    //new name[32]
    //get_user_name(id, name, 31)
    switch(key)
        {
            case 0: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_charge.mp3"),                 client_cmd(id, "say >> В Атаку!")
            case 1: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_sad_bone.mp3"),             client_cmd(id, "say >> Грустный тромбон")
            case 2: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3"),     client_cmd(id, "say >> Боже, ты посмотри вокруг, что происходит!")
            case 3: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3"),         client_cmd(id, "say >> Жил до конца, умер как герой")
            case 4: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_ehto_g_g.mp3"),             client_cmd(id, "say >> Это ГГ!")
            case 5: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3"),     client_cmd(id, "say >> Это. Просто. Нечто.")
            case 6: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3"),         client_cmd(id, "say >> Ой-ой-ой-ой-ой, бежать!")
            case 7: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_eto_nenormalno.mp3"),         client_cmd(id, "say >> Это ненормально, это нечестно!")
        }

        if(is_user_alive(id))
        {
            message_begin(MSG_ONE, SVC_TEMPENTITY, _, id);
            write_byte(TE_PLAYERATTACHMENT);
            write_coord(50);
            write_short(FILESPRITE);
            write_short(SHOWTIME * 10);
            message_end();
        }
        return PLUGIN_HANDLED;
}
 
Сообщения
384
Реакции
279
Помог
3 раз(а)
alabamaster1337,
C++:
#include <amxmodx>
#include <fakemeta>
#include <engine>

new const spriteClassName[] = "123sprite";
new const spriteFile[] = ""; //Тут путь до файла спрайта
new playerSpriteEnt[33];

public plugin_init(){
    register_think(spriteClassName, "spriteThink");
}

public spriteCreate(id){
    
    static ent, a;
    if(!a) a = engfunc(EngFunc_AllocString, "env_sprite");
    
    ent = engfunc(EngFunc_CreateNamedEntity, a);
    
    if(playerSpriteEnt[id]) spriteDelete(id);
    
    if(pev_valid(ent)){
        playerSpriteEnt[id] = ent;
        
        set_pev(ent, pev_classname, spriteClassName);
        
        set_pev(ent, pev_model, spriteFile);
        
        set_pev(ent, pev_owner, id);
        
        static Float:f[3]; pev(id, pev_origin, f); f[2] += 35.0;
        set_pev(ent, pev_origin, f);
        
        set_pev(ent, pev_rendermode, kRenderTransAdd);
        set_pev(ent, pev_renderamt, 200.0);
        
        set_pev(ent, pev_nextthink, get_gametime()+0.1);
    }
    
}

public spriteDelete(id){
    if(playerSpriteEnt[id]) remove_entity(playerSpriteEnt[id]);
    playerSpriteEnt[id] = 0;
}

public spriteThink(ent){
    if(!pev_valid(ent)) return FMRES_IGNORED;
    static id; id = pev(ent, pev_owner);
    static Float:f[3]; pev(id, pev_origin, f); f[2] += 35.0;
    engfunc(EngFunc_SetOrigin, ent, f);
    set_pev(ent, pev_nextthink, get_gametime()+0.1);
    return FMRES_IGNORED;
}
Примерно так... Но я мог тут где-то ошибиться...
18 Авг 2018
alabamaster1337, В твоём коде
C++:
precache_model(SPRITE);
->>
C++:
FILESPRITE = precache_model(SPRITE);
 
Сообщения
384
Реакции
279
Помог
3 раз(а)
Последнее редактирование:
Сообщения
316
Реакции
131
Помог
4 раз(а)
ArKaNeMaN, сделал так, не пашет
Код:
/*
    wave - client_cmd(id, "spk server/sound.wav")  // client_cmd(id, "stopsound")
    mp3 - client_cmd(id, "mp3 play sound/server/sound.mp3") // client_cmd(id, "mp3 stop")
    info https://amx-x.ru/viewtopic.php?f=9&t=23321
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_0

new const spriteClassName[] = "roflanSprite";
new const spriteFile[] = "sprites/voiceicon.spr"; //Тут путь до файла спрайта
new playerSpriteEnt[33];

public plugin_init()
{
    register_plugin("Chat Wheel Sounds", "0.1", "alabamaster1337")
        
    register_menu("menu_chatwheel", keys, "func_chatwheel")
    register_concmd("chatwheel", "chatwheelid")
    register_clcmd("chatwheel", "chatwheelid")

    register_think(spriteClassName, "spriteThink");
}

public plugin_precache()
{
    precache_sound( "chatwheel/Chat_wheel_2017_charge.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_sad_bone.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_ehto_g_g.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_eto_nenormalno.mp3" )
}

public chatwheelid(id)
{
    static menu[650], iLen
    iLen = 0
        iLen = formatex(menu[iLen],    charsmax(menu)    - iLen,    "\yЗвуковые насмешки^n")
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wВ Атаку^n")
        keys |= MENU_KEY_1
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wГрустный тромбон^n")
        keys |= MENU_KEY_2
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wПосмотри вокруг^n")
        keys |= MENU_KEY_3
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wЖил до конца^n")
        keys |= MENU_KEY_4
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wЭто ГГ^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wЭто. Просто. нечестно^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wОй-ой-ой, бежать^n")
        keys |= MENU_KEY_5
    }
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wЭто ненормально^n")
        keys |= MENU_KEY_5
    }
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\r0. \rВыход^n")
    keys |= MENU_KEY_0
    
    show_menu(id, keys, menu, -1, "menu_chatwheel");
    return PLUGIN_HANDLED
}

public func_chatwheel(id, key)
{
    // хотел сделать что-то типа вывода НИК ИГРОКА -> ТЕКСТ, но пойдет и client_cmd id
    //new name[32]
    //get_user_name(id, name, 31)
    switch(key)
    {
        case 0: spriteCreate(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_charge.mp3"), client_cmd(id, "say >> В Атаку!"), spriteDelete(id)
        case 1: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_sad_bone.mp3"),             client_cmd(id, "say >> Грустный тромбон")
        case 2: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3"),     client_cmd(id, "say >> Боже, ты посмотри вокруг, что происходит!")
        case 3: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3"),         client_cmd(id, "say >> Жил до конца, умер как герой")
        case 4: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_ehto_g_g.mp3"),             client_cmd(id, "say >> Это ГГ!")
        case 5: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3"),     client_cmd(id, "say >> Это. Просто. Нечто.")
        case 6: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3"),         client_cmd(id, "say >> Ой-ой-ой-ой-ой, бежать!")
        case 7: client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_eto_nenormalno.mp3"),         client_cmd(id, "say >> Это ненормально, это нечестно!")
    }

}

public spriteCreate(id){
    
    static ent, a;
    if(!a) a = engfunc(EngFunc_AllocString, "env_sprite");
    
    ent = engfunc(EngFunc_CreateNamedEntity, a);
    
    if(playerSpriteEnt[id]) spriteDelete(id);
    
    if(pev_valid(ent)){
        playerSpriteEnt[id] = ent;
        
        set_pev(ent, pev_classname, spriteClassName);
        
        set_pev(ent, pev_model, spriteFile);
        
        set_pev(ent, pev_owner, id);
        
        static Float:f[3]; pev(id, pev_origin, f); f[2] += 35.0;
        set_pev(ent, pev_origin, f);
        
        set_pev(ent, pev_rendermode, kRenderTransAdd);
        set_pev(ent, pev_renderamt, 200.0);
        
        set_pev(ent, pev_nextthink, get_gametime()+0.1);
    }
}

public spriteDelete(id){
    if(playerSpriteEnt[id]) remove_entity(playerSpriteEnt[id]);
    playerSpriteEnt[id] = 0;
}

public spriteThink(ent){
    if(!pev_valid(ent)) return FMRES_IGNORED;
    static id; id = pev(ent, pev_owner);
    static Float:f[3]; pev(id, pev_origin, f); f[2] += 35.0;
    engfunc(EngFunc_SetOrigin, ent, f);
    set_pev(ent, pev_nextthink, get_gametime()+0.1);
    return FMRES_IGNORED;
}
 
Сообщения
384
Реакции
279
Помог
3 раз(а)
alabamaster1337, дак потому что ты создаёшь спрайт и сразу же его удаляешь... Если надо создать на определённое время, то после создания ставь таск на это самое время и через него удаляй спрайт
18 Авг 2018
alabamaster1337,
C++:
public createTempSprite(id, Float:time){
    spriteCreate(id);
    if(task_exists(id)) remove_task(id);
    set_task(time, "spriteDelete" , id);
}
Эта функция будет создавать спрайт на указанное время
Просто её добавь себе в код и вызывай вместо spriteCreate... Только не забудь указать время...
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
Спасибо за подсказки, слепил такое, вроде работает

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

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_0

new model_gibs

public plugin_init()
{
    register_plugin("Chat Wheel Sounds", "0.1", "alabamaster1337")

    register_menu("menu_chatwheel", keys, "func_chatwheel")
    register_concmd("chatwheel", "chatwheelid")
    register_clcmd("chatwheel", "chatwheelid")
}

public plugin_precache()
{
    precache_sound( "chatwheel/Chat_wheel_2017_charge.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_sad_bone.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_ehto_g_g.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3" )
    precache_sound( "chatwheel/Chat_wheel_2018_eto_nenormalno.mp3" )

    model_gibs = precache_model("sprites/sprite_smiles/tongue.spr")
}

public chatwheelid(id)
{
    static menu[650], iLen
    iLen = 0
    iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\rЗвуковые насмешки^n")


    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wВ Атаку^n")
    keys |= MENU_KEY_1
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wГрустный тромбон^n")
    keys |= MENU_KEY_2
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wПосмотри вокруг^n")
    keys |= MENU_KEY_3
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wЖил до конца^n")
    keys |= MENU_KEY_4
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wЭто ГГ^n")
    keys |= MENU_KEY_5
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wЭто. Просто. Нечто^n")
    keys |= MENU_KEY_6
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wОй-ой-ой, бежать^n")
    keys |= MENU_KEY_7
    
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wЭто ненормально^n^n")
    keys |= MENU_KEY_8

    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r0. \wВыход")
    keys |= MENU_KEY_0

    show_menu(id, keys, menu, -1, "menu_chatwheel")
    return PLUGIN_HANDLED
}

public func_chatwheel(id, key)
{
    switch(key)
    {
        case 0:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_charge.mp3"), client_cmd(id, "say >> В Атаку!")
        }
        case 1:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_sad_bone.mp3"), client_cmd(id, "say >> Грустный тромбон")
        }
        case 2:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_bozhe_ti_posmotri.mp3"), client_cmd(id, "say >> Боже, ты посмотри вокруг, что происходит!")
        }
        case 3:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_zhil_do_konsta.mp3"), client_cmd(id, "say >> Жил до конца, умер как герой")
        }
        case 4:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_ehto_g_g.mp3"), client_cmd(id, "say >> Это ГГ!")
        }
        case 5:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_eto_prosto_netchto.mp3"), client_cmd(id, "say >> Это. Просто. Нечто.")
        }
        case 6:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_oy_oy_bezhat.mp3"), client_cmd(id, "say >> Ой-ой-ой-ой-ой, бежать!")
        }
        case 7:
        {
            func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2018_eto_nenormalno.mp3"), client_cmd(id, "say >> Это ненормально, это нечестно!")
        }
    }
    return PLUGIN_HANDLED
}

public func_break(id)
{
    if( task_exists( id ) )
    {
        remove_sprite( id )
        remove_task( id )
    }
    
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 124 )
    write_byte( id )
    write_coord( 45 )
    write_short( model_gibs )
    write_short( 100 )
    message_end()
    
    set_task( 3.0, "remove_sprite", id )
}

public remove_sprite( id )
{
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 125 )
    write_byte( id )
    message_end()
}
 
Сообщения
226
Реакции
143
Помог
4 раз(а)
А почему нельзя сделать спрайт высокого качества?
Пробовал ставить высокий DPI, но качество по сути остаётся такое же.
В теории предполагаю что высокое качество можно достичь следующим образом:
Создаём спрайт в высоком разрешении, а в игре плагин его уменьшает до нормальных размеров.
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
DimaS, я ставил большой спрайт, он получается квадратным и его фон либо черный либо синий(если спрайт из png делать), а маленькие нормально отображаются, тот же смайлик
19 Авг 2018
Вчера показали как сделать, чтоб звук было не слышно на большом расстоянии, и делей добавил
Код:
/*
    wave - client_cmd(id, "spk server/sound.wav")  // client_cmd(id, "stopsound")
    mp3 - client_cmd(id, "mp3 play sound/server/sound.mp3") // client_cmd(id, "mp3 stop")
    info https://amx-x.ru/viewtopic.php?f=9&t=23321

    spasibo pocanam s dev-cs https://dev-cs.ru/threads/3466/

    versiya s mp3 - https://dev-cs.ru/threads/3466/#post-37421
*/
#include <amxmodx>
#include <amxmisc>

#define DELAY     10     // Время(в секундах) между насмешками

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_0

new model_gibs, g_iVoteStartTime

public plugin_init()
{
    register_plugin("Chat Wheel Sounds", "1.0", "alabamaster1337 // dev-cs")

    register_menu("menu_chatwheel", keys, "func_chatwheel")
    register_concmd("chatwheel", "chatwheelid")
    register_clcmd("chatwheel", "chatwheelid")
}

public plugin_precache()
{ // звуки из доты
    precache_sound( "chatwheel/charge.wav" )
    precache_sound( "chatwheel/sad_bone.wav" )
    precache_sound( "chatwheel/bozhe_ti_posmotri.wav" )
    precache_sound( "chatwheel/zhil_do_konsta.wav" )
    precache_sound( "chatwheel/ehto_g_g.wav" )
    precache_sound( "chatwheel/eto_prosto_netchto.wav" )
    precache_sound( "chatwheel/oy_oy_bezhat.wav" )
    precache_sound( "chatwheel/eto_nenormalno.wav" )

    model_gibs = precache_model("sprites/chatwheel1.spr") // спрайт, если большой - фон черный/синий
}

public chatwheelid(id)
{
    static menu[650], iLen,iVtbDelay;
    // копипаст делея из лайт вотебан
    if((iVtbDelay = g_iVoteStartTime + DELAY - get_systime()) > 0)
        //return ChatColor(id, "^4* ^3Activation delay %d sec...", (iVtbDelay % 60));
        return client_print(id, print_center, "Activation delay %d sec...", (iVtbDelay % 60));
    // конец делея
    iLen = 0
    iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\rЗвуковые насмешки^n")


    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wВ Атаку^n")
    keys |= MENU_KEY_1
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wГрустный тромбон^n")
    keys |= MENU_KEY_2
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wПосмотри вокруг^n")
    keys |= MENU_KEY_3
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wЖил до конца^n")
    keys |= MENU_KEY_4
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wЭто ГГ^n")
    keys |= MENU_KEY_5
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wЭто. Просто. Нечто^n")
    keys |= MENU_KEY_6
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wОй-ой-ой, бежать^n")
    keys |= MENU_KEY_7
   
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wЭто ненормально^n^n")
    keys |= MENU_KEY_8

    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r0. \wВыход")
    keys |= MENU_KEY_0

    show_menu(id, keys, menu, -1, "menu_chatwheel")
    return PLUGIN_HANDLED
}

public func_chatwheel(id, key)
{
    g_iVoteStartTime = get_systime(); // делей вотебана
    switch(key)
    {
        case 0:
        { // секси синтаксис
            //func_break(id), client_cmd(0, "mp3 play sound/chatwheel/Chat_wheel_2017_charge.mp3"), client_cmd(id, "say >> В Атаку!")
            //func_break(id), emit_sound( 0, CHAN_STATIC, "chatwheel/charge.wav", VOL_NORM, ATTN_NONE, 0, PITCH_NORM), client_cmd(id, "say >> В Атаку!")
            func_break(id), emit_sound(id, 0, "chatwheel/charge.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM), client_cmd(id, "say >> В Атаку!")
        }
        case 1:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/sad_bone.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Грустный тромбон")
        }
        case 2:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/bozhe_ti_posmotri.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Боже, ты посмотри вокруг, что происходит!")
        }
        case 3:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/zhil_do_konsta.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Жил до конца, умер как герой")
        }
        case 4:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/ehto_g_g.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Это ГГ!")
        }
        case 5:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/eto_prosto_netchto.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Это. Просто. Нечто.")
        }
        case 6:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/oy_oy_bezhat.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Ой-ой-ой-ой-ой, бежать!")
        }
        case 7:
        {
            func_break(id), emit_sound(id, 0, "chatwheel/eto_nenormalno.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM ), client_cmd(id, "say >> Это ненормально, это нечестно!")
        }
    }
    return PLUGIN_HANDLED
}

// показывать спрайт
public func_break(id)
{
    if( task_exists( id ) )
    {
        remove_sprite( id )
        remove_task( id )
    }
   
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 124 )
    write_byte( id )
    write_coord( 45 )
    write_short( model_gibs ) // модель спрайта в прекеше
    write_short( 100 )
    message_end()
   
    set_task( 3.0, "remove_sprite", id ) // через сколько удалять спрайт в сек
}

// удаление спрайта
public remove_sprite( id )
{
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 125 )
    write_byte( id )
    message_end()
}
 
Последнее редактирование:
Сообщения
226
Реакции
143
Помог
4 раз(а)
alabamaster1337, Что бы не было фона, нужно правильно сохранять в спрайт.
В игре спрайт был тоже большим, и его можно уменьшить/увеличить плагином?
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
DimaS, большой был большим, на счет уменьшения хз, я только допер как двигать вниз/вверх :D
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
1. Для регулирования размеров entity (которую в ручную создали) можно использовать
Код:
set_pev(ent, pev_scale, 0.5)
однако, пока-что к вашему коду не подходит.

2. Учитесь писать код читабельнее. Для этого был создан ряд констант.
к примеру:
Код:
// показывать спрайт
public func_break(id)
{
    if( task_exists( id ) )
    {
        remove_sprite( id )
        remove_task( id )
    }
   
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 124 ) //  <----------------- заменить
    write_byte( id )
    write_coord( 45 )
    write_short( model_gibs ) // модель спрайта в прекеше
    write_short( 100 )
    message_end()
   
    set_task( 3.0, "remove_sprite", id ) // через сколько удалять спрайт в сек
}

// удаление спрайта
public remove_sprite( id )
{
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( 125 ) //  <----------------- заменить
    write_byte( id )
    message_end()
}
Что вы используете? Вы создаёте (вызываете на клиенте функцию) которая диктует клиенту создать временную entity, которая будет прикреплена к игроку (TE_PLAYERATTACHMENT). Указываете в параметрах сообщения как долго будет прикреплена и к какой entity. Удаляете подобным образом, отсылая "инструкцию" клиенту.

Информация к размышлению.
https://github.com/alliedmodders/am...plugins/include/message_const.inc#L1032-L1051

Более точный пример использования:
https://github.com/s1lentq/ReGameDL...071ac0dd1/regamedll/dlls/player.cpp#L429-L443

Можете на gamebanana поискать "возможности" такого типа выставления.
Если не желаете упираться в ограничения реализации - пользуйтесь другим способом выставления entity над головой, который посоветовал ArKaNeMaN - он дал верное направление для более точной подгонки спрайта.
19 Авг 2018
я только допер как двигать вниз/вверх :D
(vertical offset) (attachment origin.z = player origin.z + vertical offset)
20 Авг 2018
А так же, полезно к ознакомлению: https://forums.alliedmods.net/showpost.php?p=2073421&postcount=2
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
wopox1337, через set_pev как то сложно, в большинстве плагинов юзается message_begin, буду его использовать.
Если не желаете упираться в ограничения реализации - пользуйтесь другим способом
Кроме высоты мне ничего и не надо :)
За ссылки спасибо

А существует возможность чтобы длительность показа спрайта = длительности звука?
А то сделал 2 одинаковых функции только с разными тасками

Код:
               func_break_2sec(id)
                emit_sound( id, 0, "chatwheel/oy_oy_bezhat.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM )
                client_cmd(id, "say >> Ой-ой-ой-ой-ой, бежать!")
            }
            case 7:
            {
                func_break_3sec(id)
                emit_sound( id, 0, "chatwheel/eto_nenormalno.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM )
                client_cmd(id, "say >> Это ненормально, это нечестно!")
            }
        }
        return PLUGIN_HANDLED
    }
    else
    {
        ChatColor(id, "^4* ^3Only for live players!")
        return PLUGIN_HANDLED
    }
//return PLUGIN_HANDLED // если amxmod 1.8.2 нужен этот ретюрн, хз почемут так
}

// показывать спрайт
// я пока не знаю как сделать длительность спрайта = длительность звука
// поэтому разные функции
public func_break_3sec(id)
{
    if( task_exists( id ) )
    {
        remove_sprite( id )
        remove_task( id )
    }
    
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( TE_PLAYERATTACHMENT ) // 124
    write_byte( id )
    write_coord( 35 ) // 45 // высота спрайта
    write_short( model_gibs ) // модель спрайта в прекеше
    write_short( 100 ) // 100
    message_end()
    
    set_task( 3.0, "remove_sprite", id ) // через сколько удалять спрайт в сек
}

public func_break_2sec(id)
{
    if( task_exists( id ) )
    {
        remove_sprite( id )
        remove_task( id )
    }
    
    message_begin( MSG_ALL, SVC_TEMPENTITY )
    write_byte( TE_PLAYERATTACHMENT ) // 124
    write_byte( id )
    write_coord( 35 ) // 45 // высота спрайта
    write_short( model_gibs ) // модель спрайта в прекеше
    write_short( 100 ) // 100
    message_end()
    
    set_task( 2.0, "remove_sprite", id ) // через сколько удалять спрайт в сек
}
 
Сообщения
2,713
Реакции
2,993
Помог
59 раз(а)
длительность показа спрайта = длительности звука?
читай описание использования TE_PLAYERATTACHMENT
Я уже говорил даже где:
конкретно, концовку
 

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

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