Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Радио на стене со своей музыкой

Статус пользователя several
сообщение 5.10.2012, 12:24
Сообщение #1
Стаж: 14 лет

Сообщений: 112
Благодарностей: 9
Полезность: 69

Добрый день. Тут на днях нашел случайно интересный плагин Transistor Radio.
Можно ставить на стену радио (модельку) из которого будет доноситься звук Opera, Arabmusic по умолчанию. Перекодировал MP3 в WAV, закачал свой музон, все работает.
Но проблема - не сохраняются установленные радио при смене карты.
Есть интересный вариант сделать, чтобы радио установленное на карте запоминалось и висело на этой карте пока его не уберет админ (аналогично как в плагине ThreeSpawner - ставит елки на сервере и они зпоминаются плагином и стоят пока не удалит админ), то есть даже после смены карты чтоб оно автоматически включалось если админ поставил его на этой карте. Хочу сделать к новому году, чтоб в установленном мной месте на картах висело радио и играла новогодняя музыка=) Пока тестировал народу очень понравилось)

Можно ли такое сделать как то? В том виде, что плагин сейчас радио не запоминается и пропадает после смены карты
Исходник:
Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <engine>

public Ass_CreateRadio(id,level,cid){
    if (!cmd_access(id,level,cid,1))
        return PLUGIN_HANDLED

    if(entity_get_int(id, EV_INT_deadflag) != 0)
        return PLUGIN_HANDLED

    new Float:vOrigin[3]
    new Float:vAngles[3]
    entity_get_vector(id, EV_VEC_origin, vOrigin)
    entity_get_vector(id, EV_VEC_v_angle, vAngles)

        new NewEnt
        NewEnt = create_entity("info_target")

        if(NewEnt == 0) {
            return PLUGIN_HANDLED_MAIN
        }

    entity_set_string(NewEnt, EV_SZ_classname, "ass_radio")
    entity_set_model(NewEnt, "models/w_transistor.mdl")
    entity_set_int(NewEnt, EV_INT_body, 1)
    entity_set_int(NewEnt, EV_INT_sequence, 1)
    entity_set_int(NewEnt, EV_INT_solid, 2)

    new Float:MinBox[3]
    new Float:MaxBox[3]

    MinBox[0] = -8.0
    MinBox[1] = -8.0
    MinBox[2] = -8.0
    MaxBox[0] = 8.0
    MaxBox[1] = 8.0
    MaxBox[2] = 8.0

    entity_set_vector(NewEnt, EV_VEC_mins, MinBox)
    entity_set_vector(NewEnt, EV_VEC_maxs, MaxBox)

    new Float:vNewOrigin[3]
    new Float:vNormal[3]
    new Float:vTraceDirection[3]
    new Float:vTraceEnd[3]
    new Float:vTraceResult[3]
    new Float:vEntAngles[3]

    VelocityByAim(id, 64, vTraceDirection)
    
    vTraceEnd[0] = vTraceDirection[0] + vOrigin[0]
    vTraceEnd[1] = vTraceDirection[1] + vOrigin[1]
    vTraceEnd[2] = vTraceDirection[2] + vOrigin[2]

    trace_line(id, vOrigin, vTraceEnd, vTraceResult)

    if(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0) {
        remove_entity(NewEnt)
        console_print(id, "[Radio] You must plant the radio on a wall!")
        return PLUGIN_HANDLED_MAIN
    }


    vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 8.0)
    vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 8.0)
    vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 8.0)

    entity_set_origin(NewEnt, vNewOrigin)
    vector_to_angle(vNormal, vEntAngles)

    entity_set_vector(NewEnt, EV_VEC_angles, vEntAngles)


    new Float:vBeamEnd[3]
    new Float:vTracedBeamEnd[3]
    vBeamEnd[0] = vNewOrigin[0] + (vNormal[0] * 8192)
    vBeamEnd[1] = vNewOrigin[1] + (vNormal[1] * 8192)
    vBeamEnd[2] = vNewOrigin[2] + (vNormal[2] * 8192)
    trace_line(-1, vNewOrigin, vBeamEnd, vTracedBeamEnd)
    entity_set_vector(NewEnt, EV_VEC_vuser1, vTracedBeamEnd)

    entity_set_int(NewEnt, EV_INT_movetype, 5) //5 = movetype_fly, No grav, but collides.


    emit_sound(NewEnt, CHAN_WEAPON, "weapons/mine_deploy.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

    new args[4]
    num_to_str(NewEnt, args, 4)

    set_task(3.0, "RadioActivate", 0, args, 4)

    return PLUGIN_HANDLED_MAIN
}

public RadioActivate(RadioID[]) {
    new EntID = str_to_num(RadioID)
    
    new Station = get_cvar_num("radio_station")
    if (Station==1) {
        emit_sound(EntID, CHAN_VOICE, "ambience/arabmusic.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(107.0, "StartSoundAgain", EntID+22)
    } else if (Station==2) {
        emit_sound(EntID, CHAN_VOICE, "ambience/Opera.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(72.0, "StartSoundAgain", EntID+22)
    } else {
        emit_sound(EntID, CHAN_VOICE, "ambience/lv_jubilee.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(6.0, "StartSoundAgain", EntID+22)
    }
}

public StartSoundAgain(TaskID) {
    new EntID = TaskID-22
    
    new Station = get_cvar_num("radio_station")
    if (Station==1) {
        emit_sound(EntID, CHAN_VOICE, "ambience/arabmusic.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(107.0, "StartSoundAgain", EntID+22)
    } else if (Station==2) {
        emit_sound(EntID, CHAN_VOICE, "ambience/Opera.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(72.0, "StartSoundAgain", EntID+22)
    } else {
        emit_sound(EntID, CHAN_VOICE, "ambience/lv_jubilee.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(6.0, "StartSoundAgain", EntID+22)
    }
    
}

public Ass_DelRadios(id,level,cid){
    if (!cmd_access(id,level,cid,1))
        return PLUGIN_HANDLED

    new iEntity = find_ent_by_class(-1, "ass_radio")
    while(iEntity > 0)
    {
        emit_sound(iEntity, CHAN_VOICE, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        remove_task(iEntity+22)
        remove_entity(iEntity)
        iEntity = find_ent_by_class(-1, "ass_radio")
    }

    return PLUGIN_CONTINUE
}

public Ass_ResRadios(id,level,cid){
    if (!cmd_access(id,level,cid,1))
        return PLUGIN_HANDLED
    
    new iEntity = find_ent_by_class(-1, "ass_radio")
    while(iEntity > 0)
    {
        remove_task(iEntity+22)
        emit_sound(iEntity, CHAN_VOICE, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        set_task(3.0, "StartSoundAgain", iEntity+22)
        iEntity = find_ent_by_class(iEntity, "ass_radio")
    }

    return PLUGIN_CONTINUE
}

public plugin_init(){
    register_plugin("Trasistor Radio","1.0","AssKicR")
    register_clcmd("amx_setradio","Ass_CreateRadio",ADMIN_KICK)
    register_clcmd("amx_delradios","Ass_DelRadios",ADMIN_KICK)
    register_clcmd("amx_resradios","Ass_ResRadios",ADMIN_KICK)
    register_cvar("radio_station","1")
    return PLUGIN_CONTINUE
}

public plugin_precache() {
    precache_sound("weapons/mine_deploy.wav")    // Radio Place
    precache_sound("common/null.wav")            // Radio Off
    precache_sound("ambience/arabmusic.wav")    // Jihad Channel (1)
    precache_sound("ambience/Opera.wav")        // Opera Channel (2)
    precache_sound("ambience/lv_jubilee.wav")    // New Wave Channel (3)
    precache_model("models/w_transistor.mdl")
    precache_model("models/w_transistort.mdl")
    return PLUGIN_CONTINUE
}


Отредактировал: several, - 5.10.2012, 15:39
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: