[ZR&CSGO] Step Sound

Тема в разделе "Тестовые плагины", создана пользователем inklesspen, 1 май 2016.

  1. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    [ZR&CSGO] Step Sound v2.3

    При ходьбе от зомби воспроизводятся звуки.

    Поддерживаемые игры:
    - Тестировал только на CSGO, про остальные игры не знаю

    Квары лишь в версии 2.1 и более, нативов и форвардов нету, но никто не мешает вам их добавить:)

    Не забудьте добавить в файл playerclasses.txt параметр stepsound
    "zombie_classic"
    {
    // General
    "enabled" "yes"
    "team" "0"
    "team_default" "yes"
    "flags" "0"
    "group" ""

    "name" "Classic"
    "description" "Need brains!!! Arrrrggghh!"
    "stepsound" "*/zpzs/player_zombie_nomal_male_footstep1.mp3;*/zpzs/player_zombie_nomal_male_footstep2.mp3"
    // Model
    "model_path" "models\player\Csgo\zombie.mdl"
    "model_skin_index" "0"
    "alpha_initial" "255"
    "alpha_damaged" "255"
    "alpha_damage" "0"

    // Hud
    "overlay_path" ""
    "nvgs" "no"
    "fov" "90"

    // Effects
    "has_napalm" "no"
    "napalm_time" "10.0"

    // Player behavior
    "immunity_mode" "none"
    "immunity_amount" "1"
    "immunity_cooldown" "60"
    "no_fall_damage" "yes"

    "health" "8500"
    "health_regen_interval" "1.0"
    "health_regen_amount" "75"
    "health_infect_gain" "4000"
    "kill_bonus" "2"

    "speed" "300"
    "knockback" "0"
    "jump_height" "1.3"
    "jump_distance" "1.2"
    }
    Не забудьте добавить в файл playerclasses.txt параметр stepsound
    "zombie_classic"
    {
    // General
    "enabled" "yes"
    "team" "0"
    "team_default" "yes"
    "flags" "0"
    "group" ""

    "name" "Classic"
    "description" "Need brains!!! Arrrrggghh!"
    "stepsound" "*/zpzs/player_zombie_nomal_male_footstep1.mp3;*/zpzs/player_zombie_nomal_male_footstep2.mp3"
    // Model
    "model_path" "models\player\Csgo\zombie.mdl"
    "model_skin_index" "0"
    "alpha_initial" "255"
    "alpha_damaged" "255"
    "alpha_damage" "0"

    // Hud
    "overlay_path" ""
    "nvgs" "no"
    "fov" "90"

    // Effects
    "has_napalm" "no"
    "napalm_time" "10.0"

    // Player behavior
    "immunity_mode" "none"
    "immunity_amount" "1"
    "immunity_cooldown" "60"
    "no_fall_damage" "yes"

    "health" "8500"
    "health_regen_interval" "1.0"
    "health_regen_amount" "75"
    "health_infect_gain" "4000"
    "kill_bonus" "2"

    "speed" "300"
    "knockback" "0"
    "jump_height" "1.3"
    "jump_distance" "1.2"
    }
    Квары
    Код:
    zr_stepsound_path_to_playerclasses (def. addons/sourcemod/configs/zr/playerclasses.txt) - Путь к playerclass.txt файлу
    

    Видео:


    Отдельная благодарность:
    gubka - За звуки в плагине Zombie Plague
    KrolZ - За толчок в мир SourcePawn
    Ginek22 - За идею
    AS TRO - За идею с параметром stepsound в версии 2.0

    Идеи пишите в ЛС, если есть время и желание, сделаю.
    И еще, прошу IP серверов с этим плагином мне писать в ЛС. Хочу знать сколько таких серверов :)[/spoiler][/spoiler]
     

    Вложения:

    Последнее редактирование: 4 июн 2016
    White Wolf нравится это.
  2. amauri

    amauri

    Сообщения:
    4
    Симпатии:
    1
    Он работает в источнике забастовки счетчика
     
  3. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    ????
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.981
    Action на эвенте не нужен и вместо return Plugin_Continue просто return;
    Action Нужен только на Pre хуках.

    PHP:
    new Float:pos[3]
        
    GetClientAbsOrigin(clientpos);
        
    decl String:arg[256]
    Можно оба через decl создать. Быстрее будет.

    FormatEx быстрее чем Format
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.981
    @AlmazON, ну так пусть тогда весь код будет уже на новом синтаксисе, а то каша получается.
     
  6. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    Я привык строки создавать под decl, а остальное под new. Насчет Format учту.

    Action на евенте я никогда не делаю... Наверно лень было тогда писать функцию под event(+не знал тогда какие там аргументы), и скопировал с Pre хука.
     
  7. AS TRO

    AS TRO

    Сообщения:
    1.055
    Симпатии:
    508
    @inklesspen, С радостью бы поставил себе, если бы для каждого класса были бы свои индивидуальные звуки, которые можно вписать в playerclasses.txt :) Конечно же приведу пример:
    "zombie_classic"
    {
    // General
    "enabled" "yes"
    "team" "0"
    "team_default" "yes"
    "flags" "0"
    "group" ""

    "name" "Classic"
    "description" "Need brains!!! Arrrrggghh!"

    "stepsound" "sound/.../st1.mp3;sound/.../st2.mp3;sound/...ddd.mp3"
    // Model
    "model_path" "models/player/kuristaja/zombies/corpse/corpse.mdl"
    "model_skin_index" "0"
    "alpha_initial" "255"
    "alpha_damaged" "255"
    "alpha_damage" "0"

    // Hud
    "overlay_path" ""
    "nvgs" "no"
    "fov" "90"

    // Effects
    "has_napalm" "no"
    "napalm_time" "10.0"

    // Player behavior
    "immunity_mode" "none"
    "immunity_amount" "1"
    "immunity_cooldown" "60"
    "no_fall_damage" "yes"

    "health" "3200"
    "health_regen_interval" "0.0"
    "health_regen_amount" "0"
    "health_infect_gain" "500"
    "kill_bonus" "2"

    "speed" "390"
    "knockback" "3.2"
    "jump_height" "1.1"
    "jump_distance" "1.2"
    }

    "zombie_fast"
    {
    // General
    "enabled" "yes"
    "team" "0"
    "team_default" "yes"
    "flags" "0"
    "group" ""

    "name" "Classic"
    "description" "Need brains!!! Arrrrggghh!"

    "stepsound" "sound/.../dddd23.mp3;sound/.../ggg3s.mp3;sound/...fafd244.mp3"
    // Model
    "model_path" "models/player/kuristaja/zombies/corpse/corpse.mdl"
    "model_skin_index" "0"
    "alpha_initial" "255"
    "alpha_damaged" "255"
    "alpha_damage" "0"

    // Hud
    "overlay_path" ""
    "nvgs" "no"
    "fov" "90"

    // Effects
    "has_napalm" "no"
    "napalm_time" "10.0"

    // Player behavior
    "immunity_mode" "none"
    "immunity_amount" "1"
    "immunity_cooldown" "60"
    "no_fall_damage" "yes"

    "health" "3200"
    "health_regen_interval" "0.0"
    "health_regen_amount" "0"
    "health_infect_gain" "500"
    "kill_bonus" "2"

    "speed" "390"
    "knockback" "3.2"
    "jump_height" "1.1"
    "jump_distance" "1.2"
    }
    --- Добавлено позже ---
    Сможешь реализовать? :)
     
  8. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    Хм... можно... Время есть
    --- Добавлено позже ---
    Но можешь ли написать цикл перехода с 1 ключа на другой?
    Тоесть сверху вниз по порядку. Я толком не знаю как это соорудить, если увижу пример, сделаю даже доп.закачку.
    --- Добавлено позже ---
    Я разобрался, почитал про циклы и нашел while
    --- Добавлено позже ---
    Воу, а как получить класс игрока? :D
    Код:
    /*
     * ============================================================================
     *
     *  Zombie:Reloaded
     *
     *  File:          class.zr.inc
     *  Type:          Include
     *  Description:   Player class API.
     *
     *  Copyright (C) 2009-2013  Greyscale, Richard Helgeby
     *
     *  This program is free software: you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation, either version 3 of the License, or
     *  (at your option) any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     *
     *  You should have received a copy of the GNU General Public License
     *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
     *
     * ============================================================================
     */
    
    /**
     * @section Internal class cache types. Specifies which class data to access.
     */
    #define ZR_CLASS_CACHE_ORIGINAL 0   /** Original class data loaded from file. */
    #define ZR_CLASS_CACHE_MODIFIED 1   /** Default cache. Class data modified by eventual multipliers, map configs, commands, etc. */
    #define ZR_CLASS_CACHE_PLAYER   2   /** Current player class attributes. The class index parameter is used as client index when reading from this cache. */
    /**
     * @endsection
     */
    
    /**
     * Results when selecting a class for a player.
     */
    enum ClassSelectResult
    {
        ClassSelected_NoChange,     /** No class change was necessary (class already selected). */
        ClassSelected_Instant,      /** Class was instantly changed. */
        ClassSelected_NextSpawn     /** Class will be used next spawn. */
    }
    
    /**
     * Returns whether a class index is valid or not.
     *
     * @param classIndex    Class index to validate.
     *
     * @return              True if valid, false otherwise.
     */
    native bool:ZR_IsValidClassIndex(classIndex);
    
    /**
     * Gets the currently active class index that the player is using.
     *
     * @param client    The client index.
     *
     * @return          The active class index.
     */
    native bool:ZR_GetActiveClass(client);
    
    /**
     * Selects a class for a player.
     *
     * Human class attribute may be instantly applied if player is alive, human and
     * instant class change is enabled. Otherwise only the selected index will be
     * updated for next spawn.
     *
     * Class selection will be saved in client cookies if enabled.
     *
     * @param client            Client index.
     * @param classIndex        Class index.
     * @param applyIfPossible   Optional. Apply class attributes if conditions allow
     *                          it. Default is true.
     * @param saveIfEnabled     Optional. Save class selection in client cookies if
     *                          enabled. Default is true.
     *
     * @return                  Class selection result. See enum ClassSelectResult.
     */
    native ClassSelectResult:ZR_SelectClientClass(client, classIndex, bool:applyIfPossible = true, bool:saveIfEnabled = true);
    
    /**
     * Gets the class index of the class with the specified name.
     *
     * Note: This search is linear and probably won't perform well in large loops.
     *
     * @param className     Class name to search for.
     * @param cacheType     Optional. Specifies which class cache to read from,
     *                      except player cache.
     *
     * @return              Class index, or -1 if none found.
     */
    native ZR_GetClassByName(const String:className[], cacheType = ZR_CLASS_CACHE_MODIFIED);
    
    /**
     * Gets the class name displayed in the class menu.
     *
     * @param index         Index of the class in a class cache or a client index,
     *                      depending on the cache type specified.
     * @param buffer        The destination string buffer.
     * @param maxlen        The length of the destination string buffer.
     * @param cacheType     Optional. Specifies which class cache to read from.
     * @return              Number of cells written. -1 on error.
     */
    native ZR_GetClassDisplayName(index, String:buffer[], maxlen, cacheType = ZR_CLASS_CACHE_MODIFIED);
    
    
    --- Добавлено позже ---
    Нашел :D
     
    Последнее редактирование: 14 май 2016
  9. AS TRO

    AS TRO

    Сообщения:
    1.055
    Симпатии:
    508
  10. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    Ок, спасибо, поможет.
    --- Добавлено позже ---
    Лол, может я чего-то не знаю, но вроде bool имеет 2 значения: правда и лож. Почему возвращает целый номер? Ну ладно, если работает, то все хорошо.
     
  11. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.975
    Симпатии:
    2.981
    @inklesspen, в inc убери bool из native bool:ZR_GetActiveClass(client);
    Может опечатка. Порылся в исходниках - возвращает inc.
     
  12. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    Не понимаю в чем проблема, думаю где-то в цикле while, ведь я с ней никогда не работал...
    Код:
    #pragma dynamic 131072
    #include <icpack/load>
    #include <zombiereloaded>
    new Handle:gtrie;
    public Plugin:myinfo = {name = "[ZR&CSGO] Step sound", author = "inklesspen", version = "2.0 beta"}
    public OnPluginStart()
    {
        HookEvent("player_footstep", Event_Step, EventHookMode_Post)
        gtrie = CreateTrie();
    }
    
    public Event_Step(Handle event, char[] name, bool dbc)
    {
        int client = GetClientOfUserId(GetEventInt(event, "userid"))
        if(!YesPlayer(client)||!IsPlayerAlive(client)||!ZR_IsClientZombie(client))
            return
        new cindex = ZR_GetActiveClass(client);
        if(!ZR_IsValidClassIndex(cindex)) return;
        decl String:namet[256]
        decl String:arg[3000]
        decl String:arg2[64][256]
        ZR_GetClassDisplayName(cindex, namet, sizeof(namet));
        PrintToConsole(client, "[StepSound] Class: %s", namet)
        new l = ExplodeString(arg, ";", arg2, 64, 256, false)
        new Float:pos[3]
        GetClientAbsOrigin(client, pos);
        EmitAmbientSound(arg2[GetRandomInt(0, l-1)], pos, client, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.2)
    }
    
    public OnMapStart()
    {
        ClearTrie(gtrie)
        decl String:arg[3000]
        new o
        new Handle:trie = CreateTrie()
        decl String:arg2[64][64]
        decl String:name[64]
        new Handle:kv = CreateKeyValues("classes")
        FileToKeyValues(kv, "addons/sourcemod/configs/zr/playerclasses.txt")
        if(KvGotoFirstSubKey(kv, false))
        {
            do
            {   
                KvGetString(kv, "name", name, 64, "none")
                KvGetString(kv, "stepsound", arg, 3077, "none")
                SetTrieString(gtrie, name, arg)
                if(!StrEqual(arg, "none"))
                {
                    new l = ExplodeString(arg, ";", arg2, 64, 64, false)
                    for(new i=0;i<l;i++)
                    {
                        if(!GetTrieValue(trie, arg2[l], o))
                        {
                            SetTrieValue(trie, arg2[l], 1)
                            CSGOPrecacheSound(arg2[l])
                            ReplaceString(arg2[l], 64, "*", "sound", false)
                            AddFileToDownloadsTable(arg2[l])
                        }
                    }
                }
            } while(KvGotoNextKey(kv, false))
        }
        CloseHandle(kv)
        CloseHandle(trie)
    }
    
    --- Добавлено позже ---
    А, охренеть, я забыл вписать получение звуков из ключа :D
     
    Последнее редактирование: 14 май 2016
  13. AS TRO

    AS TRO

    Сообщения:
    1.055
    Симпатии:
    508
    Добавь пожалуйста чтобы можно было кваром менять путь к файлу. Это бы добавило плагину "гибкость" под нужные карты :)
    Тобишь, с плагином map configs у меня для ЗЕ и ЗМ карт каждый свой конфиг классов зомби :) аль можно сделать проще) чтобы путь к файлу с классами брался из квара в самом ЗР. Там есть квар, который отвечает за путь к классам игроков :)
    Чувствую плагин будет просто конфеткой :3
     
  14. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    Хорошо.
    --- Добавлено позже ---
    Щас залил версию 2.0 без квара, щас делаю с кваром
    --- Добавлено позже ---
    Залил 2.1 версию
     
    Последнее редактирование: 14 май 2016
  15. AS TRO

    AS TRO

    Сообщения:
    1.055
    Симпатии:
    508
    @inklesspen, спасибо большое! :) Завтра протестирую и отпишусь :)
    Теперь осталось найти нормальные звуки шагов зомби :D
     
  16. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    833
    Симпатии:
    197
    в Zombie Plague есть звуки.
    --- Добавлено позже ---
    Лол, пока копался в коде, заметил ошибку :D
     
    Последнее редактирование: 4 июн 2016