Autoprecache Sound Models

Autoprecache Sound Models 1.0

Нет прав для скачивания
Сообщения
1,618
Реакции
1,651
MayroN добавил(а) новый ресурс:

Autoprecache Sound Models - Автопрекеш звуков из кастомных моделей оружий

Плагин выполняет автозагрузку звуков из конкретных кастомных моделей v_

Для чего это нужно ?

К примеру Вы установили на сервер кучу пушек кастомных CS:GO например со своими кастомными звуками

И тут они говорят,почему мы не слышим звуков оружий - деплой,перезарядка,и прочее
Узнать больше об этом ресурсе...
 
Сообщения
1,086
Реакции
233
Предупреждения
8
Помог
6 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
MayroN,
sv_auto_precache_sounds_in_models разве не справляется с этой задачей? Или я чего не знаю?
 
Сообщения
1,618
Реакции
1,651
MayroN,
sv_auto_precache_sounds_in_models разве не справляется с этой задачей? Или я чего не знаю?
Он справляется с общей задачей на все пушки
А в плагине лишь задача на конкретные пушки из списка
 
Сообщения
1,086
Реакции
233
Предупреждения
8
Помог
6 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
MayroN, вывести бы ещё это все дело в какой-нибудь json или ini
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
456
Реакции
304
Помог
7 раз(а)
MayroN, вывести бы ещё это все дело в какой-нибудь json или ini
Код:
#include <amxmodx>
#include <fakemeta>
#include <json>

#define PLUGIN    "Autoprecache Sound Models"
#define VERSION    "1.1"
#define AUTHOR    "MayroN & ArKaNeMaN"

/**
* amxmodx/configs/plugins/...:
*   /AutoprecacheSoundModels.ini:
*       models/custom/v_ak47.mdl
*       models/custom/v_m4a1.mdl
*       ...
*   /AutoprecacheSoundModels.json:
*       [
*           "models/custom/v_ak47.mdl",
*           "models/custom/v_m4a1.mdl"
*           ...
*       ]
*
* Читаются сразу и оба файла и массив list_models_v. Всё опционально.
* Если вариант с массивом не нужен - удалите или закомментируйте весь массив.
*/

new const CONFIG_INI_FILE[] = "AutoprecacheSoundModels.ini";
new const CONFIG_JSON_FILE[] = "AutoprecacheSoundModels.json";

new const list_models_v[][] = {
    "models/custom/v_ak47.mdl",
    "models/custom/v_m4a1.mdl",
    "models/custom/v_awp.mdl",
    "models/custom/v_deagle.mdl",
}

public plugin_precache(){
    register_plugin(PLUGIN, VERSION, AUTHOR);

    #if defined list_models_v
    for(new i = 0; i < sizeof list_models_v; i++) {
        UTIL_PrecacheSoundsFromModel(list_models_v[i]);
    }
    #endif

    if (file_exists(GetConfigPath(CONFIG_JSON_FILE))) {
        PrecacheFromJson(GetConfigPath(CONFIG_JSON_FILE));
    }

    if (file_exists(GetConfigPath(CONFIG_INI_FILE))) {
        PrecacheFromIni(GetConfigPath(CONFIG_INI_FILE));
    }
}

PrecacheFromJson(const filePath[]) {
    new JSON:configJson = json_parse(filePath, true, true);

    if (configJson == Invalid_JSON) {
        log_amx("[ERROR] JSON syntax error in '%s'.", filePath);
        return;
    }

    if (!json_is_array(configJson)) {
        log_amx("[ERROR] '%s' must contains a json array.", filePath);
        json_free(configJson);
        return;
    }

    for (new i = 0, ii = json_array_get_count(configJson); i < ii; ++i) {
        new modelPath[PLATFORM_MAX_PATH];
        json_array_get_string(configJson, i, modelPath, charsmax(modelPath));

        if (modelPath[0] == EOS) {
            continue;
        }

        if (!file_exists(modelPath)) {
            log_amx("[ERROR] Model '%s' not found. File '%s', item #%d.", modelPath, filePath, i);
            continue;
        }
       
        UTIL_PrecacheSoundsFromModel(modelPath);
    }
   
    json_free(configJson);
}

PrecacheFromIni(const filePath[]) {
    new fileHandle = fopen(filePath, "rt");
    if (!fileHandle) {
        return;
    }

    new modelPath[PLATFORM_MAX_PATH];
    new lineIndex = 1;
    while (!feof(fileHandle)) {
        fgets(fileHandle, modelPath, charsmax(modelPath));
        if (modelPath[0] == '#' || modelPath[0] == EOS) {
            continue;
        }

        if (!file_exists(modelPath)) {
            log_amx("[ERROR] Model '%s' not found. File '%s', line #%d.", modelPath, filePath, lineIndex);
            continue;
        }
       
        UTIL_PrecacheSoundsFromModel(modelPath);

        ++lineIndex;
    }

    fclose(fileHandle);
}

stock UTIL_PrecacheSoundsFromModel(const szModelPath[]) {
    new iFile = fopen(szModelPath, "rt");
    if (!iFile) {
        return;
    }

    new szSoundPath[PLATFORM_MAX_PATH];
    new iNumSeq, iSeqIndex;
    new iEvent, iNumEvents, iEventIndex;

    fseek(iFile, 164, SEEK_SET);
    fread(iFile, iNumSeq, BLOCK_INT);
    fread(iFile, iSeqIndex, BLOCK_INT);

    for (new k, i = 0; i < iNumSeq; i++) {
        fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
        fread(iFile, iNumEvents, BLOCK_INT);
        fread(iFile, iEventIndex, BLOCK_INT);
        fseek(iFile, iEventIndex + 176 * i, SEEK_SET);

        for (k = 0; k < iNumEvents; k++) {
            fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
            fread(iFile, iEvent, BLOCK_INT);
            fseek(iFile, 4, SEEK_CUR);

            if (iEvent != 5004) {
                continue;
            }

            fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
            if (szSoundPath[0] != EOS) {
                engfunc(EngFunc_PrecacheSound, szSoundPath);
            }
        }
    }

    fclose(iFile);
}

GetConfigPath(const path[]) {
    new configPath[PLATFORM_MAX_PATH];
    get_localinfo("amxx_configsdir", configPath, charsmax(configPath));
    formatex(configPath, charsmax(configPath), "%s/plugins/%s", configPath, path);

    return configPath;
}
И исходный вариант, и json, и ini, на любой вкус)

Только я не тестил это, если кто будет пробовать, отпишите работает ли)
 
Последнее редактирование:
Сообщения
1,618
Реакции
1,651
ArKaNeMaN,
Здароу братишка
Если рабочее,закинем обновку
 
Сообщения
68
Реакции
13
sv_auto_precache_sounds_in_models разве не справляется с этой задачей? Или я чего не знаю?
Этот квар не делает закачку нужных звуков, он просто разрешает и запрещает их воспроизводить. Или я чего то не знаю?
 
Сообщения
68
Реакции
13
Он справляется с общей задачей на все пушки
А в плагине лишь задача на конкретные пушки из списка
Привет. Хотел бы уточнить, а не проще поставить плагин "Precache.amxx" и в файле "precache.ini" просто указывать все звуки оружия, которые нужно закачать на клиент игроков? Проще добавить строчку со звуком в "precache.ini", чем каждый раз компилировать Autoprecache Sound Models.
 
Сообщения
723
Реакции
610
Предупреждения
8
Помог
13 раз(а)
Valve, Еще лучше избавиться от кфг и изменение исходника каждый раз (можно автоматизировать этот процесс: хукать прекеш v_ моделей и получить звуки)
 
Сообщения
68
Реакции
13
Vaqtincha, офигенно помог, вообще ничего не понял. Если это был сарказм, то смысл? Лучше бы написал реальное решение.
 
Сообщения
1,618
Реакции
1,651
Привет. Хотел бы уточнить, а не проще поставить плагин "Precache.amxx" и в файле "precache.ini" просто указывать все звуки оружия, которые нужно закачать на клиент игроков? Проще добавить строчку со звуком в "precache.ini", чем каждый раз компилировать Autoprecache Sound Models.
Привет
Так выше ArKaNeMaN дал это всё с .ini файлом
 
Сообщения
93
Реакции
145
Помог
1 раз(а)
MayroN, ArKaNeMaN, Советую убрать данную строчку кода
Код:
strtolower(szSoundPath);
так как названия звуков могут быть в разном регистре.
Например у нас есть звук
Код:
Ak47-Beast_Deploy.wav
и в модели он прописан также, а из за данной строчки кода будет
Код:
ak47-beast_deploy.wav
из за чего сам звук не будет добавлен в прикеш, так как он не был найден на сервере, при том что звук есть, но сервер не может его найти только из за регистра. У самого была такая проблема и долго не могли понять, почему звук как бы есть на сервере, но он не качается игроку.

Также стоит избавиться от
Код:
precache_sound / EngFunc_PrecacheSound
так как в нем лимит прикеша 511, когда такие звуки можно прикешить через
Код:
precache_generic / EngFunc_PrecacheGeneric
В generic лимит 4096 файлов.

Собсна здесь так и сделанно
 

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

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