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

Воспроизведение звуков в ambient_generic.

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

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

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

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

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

Воспроизведение звуков в ambient_generic.

Сообщение ruScripter » 05 сен 2021, 13:37

Всем привет.

Делаю свой первый скрипт.
Короч на карте есть ambient_generic. Мне нужно, чтобы от воспроизводил последовательно несколько звуков. Попробовал через emit_sound(). Всё ОК за одним исключение: звук проигрывается везде, а в ambient_generic установлен флаг small radius. Я так понимаю emit_sound первым параметром принимает только ID игрока? Поможет ли мне функция EF_EmitAmbientSound или она дублирует функционал emit_sound? Помогите, пожалуйста. Заранее спасибо.

Сосбно код плагина:
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <hamsandwich>
#include <string>

#define PLUGIN "changemdlanim"
#define VERSION "1.0"
#define AUTHOR "Multiscripter"

new doorSounds[2][] = {
    "doors/doormove6.wav",
    "doors/doormove7.wav"
}

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    
//new mapid[32];
    //get_mapname(mapid, charsmax(mapid))
    //if(equal(mapid, "de_aztec"))
    
    RegisterHam
(Ham_Use,"func_button", "changeModelAnim", 1)
}

public plugin_precache() {
    for (new a = 1; a < sizeof(doorSounds); a++)
        precache_sound(doorSounds[a])
}

/*
param params:    Массив параметров (
    Идентификатор интити,
    номер анимации,
    Скорость воспроизведения анимации
)
*/
public playAnimation(any:params[]) {
    //client_print(0,print_chat,"playAnimation: %d",params[1])
    entity_set_float(params[0], EV_FL_animtime, get_gametime())
    entity_set_float(params[0], EV_FL_framerate, params[2])
    entity_set_float(params[0], EV_FL_frame, 0.0)
    entity_set_int(params[0], EV_INT_sequence, params[1])
}

public playSound(any:params[]) {
    emit_sound(
        params[0], 
        CHAN_STATIC
, 
        doorSounds
[params[1]], 
        0.5
, // Volume 0.0 - 1.0
        ATTN_NORM, 
        params
[2], 
        PITCH_NORM
    
)
}

public testFunc() {
    client_print(0,print_chat,"testFunc")
}

public changeModelAnim(curId, callerId, activatorId, useType, Float:value) {
    
    new curName
[32]
    new written = entity_get_string(curId, EV_SZ_targetname, curName, 31)
    client_print(0,print_chat,"current name: %s",curName)
    
    new tarName
[32]
    written = entity_get_string(curId, EV_SZ_target, tarName, 31)
    client_print(0,print_chat,"target name: %s",tarName)
    
    new tarId 
= find_ent_by_tname(-1, tarName)
    client_print(0,print_chat,"target: %d",tarId)
    
    new model
[] = "models/test/door-strong-01.mdl"
    new mdlName[128]
    written = entity_get_string(tarId, EV_SZ_model, mdlName, 127)
    //client_print(0,print_chat,"model name: %s",mdlName)

    if (!equal(mdlName, model, strlen(model)))
        return PLUGIN_HANDLED
        
    
// Sound.
    new soundSuffix[] = "-sound"
    new soundPlayerName[sizeof(tarName) + sizeof(soundSuffix)] 
    strcat
(soundPlayerName, tarName, sizeof(soundPlayerName))
    strcat(soundPlayerName, soundSuffix, sizeof(soundPlayerName))
    // Id of ambient_generic.
    new soundPlayerId = find_ent_by_tname(-1, soundPlayerName)
    client_print(0,print_chat,"soundPlayerId: %d",soundPlayerId)
    new paramsSound[3]
    paramsSound[0] = soundPlayerId
        
    
// Anim sequence.
    new seqId = entity_get_int(tarId, EV_INT_sequence)
    //client_print(0,print_chat,"sequence: %d",seqId)
    
    new paramsAnim
[3]
    paramsAnim[0] = tarId 
    paramsAnim
[2] = 1.0
    
    if 
(seqId == 0) {
        client_print(0,print_chat,"CLOSED")
        
        paramsSound
[1] = 0 // Index of first sound
        paramsSound[2] = 0 // Empty flag
        playSound(paramsSound)
        paramsSound[2] = SND_STOP
        set_task
(2.0, "playSound", 0, paramsSound, 3)
        paramsSound[1] = 1 // Index of second sound
        paramsSound[2] = 0// Empty flag
        set_task(2.0, "playSound", 0, paramsSound, 3)
        paramsSound[2] = SND_STOP
        set_task
(5.0, "playSound", 0, paramsSound, 3)
        
        paramsAnim
[1] = 2
        playAnimation
(paramsAnim)
        paramsAnim[1] = 1
        set_task
(5.0, "playAnimation", 0, paramsAnim, 3)
    } else if (seqId == 1) {
        client_print(0,print_chat,"OPENED")
        
        paramsSound
[1] = 1 // Index of second sound
        paramsSound[2] = 0 // Empty flag
        playSound(paramsSound)
        paramsSound[2] = SND_STOP
        set_task
(3.0, "playSound", 0, paramsSound, 3)
        paramsSound[1] = 0 // Index of first sound
        paramsSound[2] = 0 // Empty flag
        set_task(3.0, "playSound", 0, paramsSound, 3)
        paramsSound[2] = SND_STOP
        set_task
(5.0, "playSound", 0, paramsSound, 3)
        
        
        paramsAnim
[1] = 3
        playAnimation
(paramsAnim)
        paramsAnim[1] = 0
        set_task
(5.0, "playAnimation", 0, paramsAnim, 3)
    }
    return PLUGIN_HANDLED
}

Аватара пользователя
ruScripter
 
Сообщения: 4
Зарегистрирован: 19 авг 2014, 23:00
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели

Re: Воспроизведение звуков в ambient_generic.

Сообщение trojanranson » 11 сен 2021, 10:16

emit_sound принимает ид игрока и энтити, если ид = 0 то будут слышать все. Точнее звук будет вешаться и эмитироваться на всех.
amxx просто хобби для себя.
Аватара пользователя
trojanranson
 
Сообщения: 87
Зарегистрирован: 07 мар 2020, 23:15
Откуда: г.Херосн
Благодарил (а): 32 раз.
Поблагодарили: 10 раз.
Опыт программирования: Меньше недели
Языки программирования: Пиво с рыбкой


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

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

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