Иконка ресурса

amxx [WIP] Revive Teammates 3.1.87

Нет прав для скачивания
Установка
  1. Скомпилируйте плагин (инструкция)
  2. Скопируйте скомпилированные .amxx плагины в папку /amxmodx/plugins/
  3. Скопируйте конфигурационный файл revive_teammates.json в папку /amxmodx/configs/plugins
  4. Отключите ненужные плагины в plugins-revive_teammates.ini
  5. Скопируйте содержимое папки sprites на ваш сервер (спрайт использует аддон rt_life_time.sma)
  6. Сделайте необходимые настройки (см. ниже)
  7. Сделайте рестарт или смените карту
Настройки
Обратите внимание, что конфиг автоматически меняется если вы добавляете/убираете/модифицируете аддоны!

Код:
{
    "RT": "Config file was changed at 2023.11.22 - 21:14:07",
    "VERSION": "3.1.85",
    "AUTHOR": "Emma Jule",
    "INFO": {
        "#": "Значение квара",
        "description": "Описание квара",
        "min": "Минимальное допустимое значение",
        "max": "Максимальное допустимое значение"
    },
    "chat_prefix": {
        "#": "[!gRevive Teammates!y]",
        "description": [
            "Приставка для чат сообщений",
            "!y - Желтвый",
            "!t - Цвет команды",
            "!g - Зеленый"
        ]
    },
    "duration": {
        "#": 5,
        "description": [
            "Время действия процесса воскрешения",
            "Используйте 0 для мнгновенного действия (достаточно только нажать кнопку)"
        ],
        "min": 0,
        "max": 10
    },
    "box_size": {
        "#": "-42.0 -3.44 -22.16 36.0 8.57 24.0",
        "description": [
            "Минимальный и максимальный размер объекта",
            "Созданная сущность в игре имеет размеры куба 6 проекций (сверху сбоку сзади спереди слева справо)",
            "Сам труп принимает свойство кнопки (радиус отлова 128 units)"
        ]
    },
    "misc": {
        "next_use": {
            "#": 0.7,
            "description": "Время после которого игрок вновь сможет использовать трупы (+use)",
            "min": 0.1,
            "max": 5
        },
        "catch_mode": {
            "#": 1,
            "description": [
                "Метод поиска трупа",
                "0 - Отлов первого попавшегося трупа в радиусе",
                "1 - Отлов трупа с максимально близкой дистанцией к игроку"
            ]
        }
    },
    "effects": {
        "bar": {
            "#": 1,
            "description": "Процесс будет сопровождатся полоской по центру эркана"
        },
        "observer": {
            "#": 1,
            "description": "Камера автоматически перенаправит на игрока кто его использует"
        },
        "light": {
            "#": 0,
            "description": [
                "Подсветка трупа",
                "Внимание: может вызывать нагрузку из-за особенностей свечения движка!"
            ]
        },
        "alert_mode": {
            "#": "c",
            "description": [
                "Режим уведомлений",
                "a - в чат",
                "b - по центру экрана",
                "c - HUD (плавное сообщение)",
                "Примечание: можно использовать посовместно",
                "'' или 0 - Отключено"
            ]
        },
        "respawn_sound": {
            "#": "",
            "description": "Звук когда игрок возродился (вводите без sound/)"
        },
        "loot_sound": {
            "#": "",
            "description": "Звук когда начинаеш возрождать тиммейта (вводите без sound/)"
        },
        "loot_break_sound": {
            "#": "",
            "description": "Звук когда прекращено использование трупа (вводите без sound/)"
        },
        "revive_notification": {
            "#": 1,
            "description": [
                "Уведомление о воскрешении тиммейта",
                "0 - Нет",
                "1 - Всем",
                "2 - Только команде",
                "3 - Только трупу и тому кто его поднимал"
            ]
        },
        "screenfade": {
            "#": 0,
            "description": "Затемнение экрана в момент воскрешения игрока"
        },
        "screenfade_respawn": {
            "#": 1,
            "description": "Затемнение экрана (блик) для воскрешенного игрока"
        }
    },
    "bonuses": {
        "frags": {
            "#": 0,
            "description": "Фрагов за поднятие тиммейта"
        },
        "restore_death": {
            "#": 0,
            "description": "Обнулить очко смерти воскрешенному игроку"
        },
        "spawn_health": {
            "#": 0,
            "description": "Количество здоровья с которым появится воскрешенный игрок",
            "max": 255
        },
        "give_kevlar": {
            "#": 0,
            "description": [
                "Выдавать броню?",
                "0 - Нет",
                "1 - Бронижелет",
                "2 - Бронижелет с каской"
            ],
            "min": 0,
            "max": 2
        },
        "bonus_health": {
            "#": 0,
            "description": "Количество бонусного здоровья за поднятие тиммейта"
        },
        "protection": {
            "#": 0,
            "description": [
                "Защита после спавна (в секундах)",
                "В этот период воскрешенного игрока не смогут убить!"
            ],
            "max": 5
        },
        "health_limit_control": {
            "#": 0,
            "description": [
                "Здоровье не привысит максимальное здоровье игрока",
                "Допустим по умолчанию максимальное здоровье 100, бонусное здоровье не сможет привысить этот параметр",
                "Это также будет учитывать некоторые плагины по типу лечебная граната, шприц.."
            ]
        },
        "weapons": {
            "#": "knife deagle",
            "description": [
                "Список оружий с которым заспавнится воскрешенный игрок",
                "Примечание: вводите через пробел и без weapon_"
            ]
        }
    },
    "restrictions": {
        "flag": {
            "#": "",
            "description": [
                "Флаг(и) доступа к возрождению тиммейтов!",
                "0 или '' - Для всех"
            ]
        },
        "max_spawns": {
            "#": 3,
            "description": [
                "Если игрок возрождался более чем Х раз в этом раунде",
                "то его нельзя будет возродить этим плагином!"
            ]
        },
        "max_usage": {
            "#": 2,
            "description": "Сколько максимально может поднять тиммейтов игрок за раунд"
        },
        "block_attack": {
            "#": 1,
            "description": "Игрок не сможет стрелять в момент действия с трупом"
        },
        "round": {
            "#": 0,
            "description": "Использовать труп можно только со Х раунда! (будет спавнить обычные трупы)"
        },
        "round_ended": {
            "#": 0,
            "description": "Невозможно использовать труп в конце раунда!"
        },
        "cost": {
            "#": 0,
            "description": "Плата за использования трупа [$]"
        },
        "bomb": {
            "#": 0,
            "description": "Нельзя использовать труп когда бомба уже установленна"
        },
        "waterlevel": {
            "#": 0,
            "description": [
                "Нельзя использовать если уровень воды игрока",
                "0 - Любой",
                "1 - Ноги в воде",
                "2 - По пояс в воде",
                "3 - Полностью в воде"
            ]
        },
        "on_ladder": {
            "#": 0,
            "description": "Игрок не сможет использовать труп когда находится на лестнице"
        },
        "vip_person": {
            "#": 0,
            "description": [
                "VIP-персона не может использовать трупы",
                "Это работает на сценарии 'Спасти VIP' [as_* карты]"
            ]
        },
        "players_duel": {
            "#": 0,
            "description": "Никто не может использовать трупы когда остались 1 на 1"
        },
        "players_difference": {
            "#": 0,
            "description": [
                "Нельзя использовать трупы если разница живых игроков превышет этот квар",
                "Примечание: это не коснется команды которая в меньшинстве!",
                "0 - Выключает эту возможность"
            ]
        },
        "domination": {
            "#": 0,
            "description": [
                "Доминирующая команда не может использовать трупы!",
                "Это касается команды которая одерживает Х побед подряд!"
            ]
        },
        "time_expired": {
            "#": 0,
            "description": "Использование трупа работает если от начала раунда прошло более Х сек.",
            "max": 60
        },
        "time_remaining": {
            "#": 0,
            "description": "Нельзя использовать труп за Х сек. до конца раунда",
            "max": 120
        },
        "can_jump": {
            "#": 1,
            "description": "Игрок может прыгать в момент использования трупа"
        },
        "can_duck": {
            "#": 1,
            "description": "Игрок может сидеть/присаживатся в момент использования трупа"
        },
        "maxspeed": {
            "#": 1,
            "description": [
                "Скорость игрока в момент использования трупа",
                "1 - Стоит на месте"
            ],
            "min": 0
        },
        "hold_use": {
            "#": 1,
            "description": [
                "Игрок должен удерживать E (+use) чтобы использовать труп",
                "0 - Достаточно просто нажать!"
            ]
        },
        "view_cone": {
            "#": 0,
            "description": "Игрок может взаимодействовать с трупом только если он в зоне видимости его экрана"
        }
    },
    "respawn_features": {
        "unstuck": {
            "#": 1.75,
            "description": "Поле увеличивающего прогресса для поиска свободной точки"
        },
        "spawn_place": {
            "#": 2,
            "description": [
                "Место спавна воскрешенного игрока",
                "0 - На респе",
                "1 - В игроке, который воскресил тело (используйте вместе с semiclip)",
                "2 - На том месте где был заспавнен труп"
            ]
        }
    },
    "model_support": {
        "skin_support": {
            "#": 0,
            "description": [
                "Поддержка субмоделей",
                "Активируйте если вы используете skin в моделях игроков"
            ]
        },
        "cl_minmodels_support": {
            "#": 0,
            "description": "Поддержка клиентов с активным кваром cl_minmodels 1"
        },
        "size_from_file": {
            "#": 0,
            "description": "Будет брать размеры объекта напрямую с файла модели."
        }
    },
    "life_time": {
        "sprite": {
            "#": "sprites/revive.spr",
            "description": [
                "Спрайт (файл) для показа счетчика времени",
                "Можно оставить пустым, тогда будет просто как таймер!"
            ]
        },
        "spawn_time": {
            "#": 5,
            "description": "Время, после которого появится таймер отсчета"
        },
        "destroy_time": {
            "#": 40,
            "description": [
                "Время жизни трупа",
                "Внимание: вы должны точно знать сколько фреймов в вашем спрайте!"
            ]
        },
        "scale": {
            "#": 0.15,
            "description": "Размер спрайта"
        },
        "up_yaw": {
            "#": 24,
            "description": "На сколько юнит поднять спрайт над трупом"
        },
        "step_time": {
            "#": 1,
            "description": "Интервал времени отсчета (тоесть это может быть не обязательно секунда)"
        },
        "team": {
            "#": 0,
            "description": [
                "Действие команд",
                "0 - Работает для всех",
                "1 - Работает только для TERRORIST",
                "2 - Работает только для CT"
            ],
            "min": 0,
            "max": 2
        },
        "flag": {
            "#": "",
            "description": [
                "Флаг(и) доступа к исключению!",
                "0 или '' - Плагин действует для всех!"
            ]
        }
    },
    "mined_enemies": {
        "flag": {
            "#": "",
            "description": [
                "Флаг(и) доступа к минированию врагов!",
                "0 или '' - Для всех"
            ]
        },
        "max_usage": {
            "#": 2,
            "description": "Сколько максимально сможет минировать трупов игрок за раунд"
        },
        "mined_mode": {
            "#": 0,
            "description": [
                "Режим активации взрыва:",
                "0 - После процесса воскрешения",
                "1 - Моментально (сразу после активации трупа)",
                "2 - Детонация (все заминированные трупы взорвутся, после того как игрок нажал дважды E)"
            ]
        },
        "bar": {
            "#": 1,
            "description": "Полоска прогресса минирования"
        },
        "radius": {
            "#": 250,
            "description": "Максимальный допустимый радиус поражения",
            "min": 64,
            "max": 500
        },
        "damage": {
            "#": 50,
            "description": "Урон от взрыва",
            "min": 10
        },
        "painshock": {
            "#": 0.01,
            "description": "Болевой шок после удара (сила замедления диапазон: от 0 до 1)",
            "min": 0.01,
            "max": 1
        },
        "damage_include_radius": {
            "#": 0,
            "description": [
                "Урон будет зависить от радиуса, чем дальше игрок тем меньше урона он получит",
                "Контролируйте также урон, т.к. при радиусе игрок мало что получит"
            ]
        },
        "screen_punch": {
            "#": 1,
            "description": "Тряска экрана от полученного урона (взрывной волны)"
        },
        "explode_sprites": {
            "#": 1,
            "description": "Эффект взврывчатки при детонации заминированного трупа"
        },
        "mined_sound": {
            "#": "",
            "description": "Звук при успешном минировании трупа!"
        },
        "alert_mode": {
            "#": "c",
            "description": [
                "Режим уведомлений",
                "a - в чат",
                "b - по центру экрана",
                "c - HUD (плавное сообщение)",
                "Примечание: можно использовать посовместно (abc)",
                "'' или 0 - Отключено"
            ]
        },
        "explode_sound": {
            "#": "",
            "description": [
                "Звук взрыва трупа!",
                "При пустом значении будет использоваться стандартный звук спрайта.",
                "Используйте 'off' - если хотите полностью исключить звук!"
            ]
        }
    }
}
API
Код:
#if defined _revive_teammates_included
  #endinput
#endif
#define _revive_teammates_included

#include <revive_teammates_const>

#if AMXX_VERSION_NUM >= 175
    #pragma reqlib revive_teammates
    #if !defined AMXMODX_NOAUTOLOAD
        #pragma loadlib revive_teammates
    #endif
#else
    #pragma library revive_teammates
#endif

/**
* Retrives a plugin prefix
*
* @param string        String buffer to copy
* @param len           Max buffer size
*
* @noreturn
*/
native RT_GetPrefix(string[], len);

/**
* Force delete a player corpse
*
* @param id            Player index
*
* @return              true if the deletion was successful, false otherwise
*/
native RT_DeleteCorpse(id);

/**
* Get a entity index of player corpse
*
* @param id            Player index
*
* @return              Entity index of player corpse, 0 otherwise (player alive or switching team, etc..)
*/
native RT_GetCorpse(const id);

/**
* Checks if the player is using a corpse right now
*
* @param id            Player index
*
* @return              true if using, false otherwise
*/
native bool:RT_IsUsing(const id);

/**
* Check if an action with this status is possible
*
* @param status        Relation status (see revive_teammates_const.inc)
*
* @return              true on success, false otherwise
*/
native bool:RT_Get_Relation(RelationStatus:status);

/**
* Establish interaction with this status
*
* @param status        Relation status (see revive_teammates_const.inc)
* @param set           Interaction control
*
* @noreturn
*/
native RT_Set_Relation(RelationStatus:status, bool:set);

/**
* Get a relationship status between two players
*
* @param player        Player index (like a victim)
* @param target        Player index (like a attacker)
*
* @return              Relation status (see revive_teammates_const.inc)
*/
native RelationStatus:RT_RelationShipStatus(const player, const target);

/**
* Force's a begin action of revive
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param skip_checks   If true, the process cannot be stopped by other plugins.
*                      Be carefully about plugin logic
*
* @return              true on success, false otherwise
*/
native RT_GoAction(const corpse_id, const activator, const bool:skip_checks = false);

/**
* Instantly a break action of revive
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param owner         Player index (owner of corpse)
* @param complete      Complete status
*
* @return              true on success, false otherwise
*/
native RT_BreakAction(const corpse_id, const activator, const owner, bool:complete);

/**
* Called when player cathed corpse via button (on +use)
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param owner         Player index (owner of corpse)
*
* @return      RT_CONTIUE to let the activator use the corpse
*              RT_SUPERCEDE to prevent this action
*/
forward RT_StartLoot_Pre(const corpse_id, const activator, const owner);

/**
* Called when player cathed corpse via button (on USE)
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param owner         Player index (owner of corpse)
* @param duration      Time for the process
*
* @noreturn
*/
forward RT_StartLoot_Post(const corpse_id, const activator, const owner, Float:duration);

/**
* Called when the player has finished reviving or disactivate it.
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param owner         Player index (owner of corpse)
* @param complete      This means the revive is passed
*
* @return     RT_CONTINUE to let the completed it successfully and the player will be spawned
*             RT_SUPERCEDE or higher complete the process, but the player will not be revived
*/
forward RT_StopLoot(const corpse_id, const activator, const owner, bool:complete);

/**
* Called when creating the corpse of a deceased player (ClCorpse message)
*
* @param corpse_id     Entity index of corpse
* @param owner         Player index (owner of corpse)
*
* @return     CORPSE_CUSTOM a custom corpse with defined properties (using by default)
*             CORPSE_DEFAULT a corpse is created via a message (default behaviour)
*             CORPSE_BLOCK prevent the appearance of a corpse
*/
forward RT_StartSneaking(const corpse_id, const owner, const Float:origin[3]);

/**
* Called when the corpse is removed (when spawning, changing the team, exiting the server, etc..)
*
* @param corpse_id     Entity index of corpse
* @param owner         Player index (owner of corpse)
*
* @noreturn
*/
forward RT_StopSneaking(const corpse_id, const owner);

/**
* Called at every think of entity
*
* @param corpse_id     Entity index of corpse
* @param activator     Player index (corpse activator)
* @param owner         Player index (owner of corpse)
* @param time_ending   This is the time when the process of rebirth will be completed
* @param nextthink     This is the time of the next call (can be overwritten) [def: 1.0]
*
* @return     RT_CONTINUE to let the continue of procces
*             RT_SUPERCEDE or higher to prevent this action
*/
forward RT_ThinkLoot(const corpse_id, const activator, const owner, Float:time_ending, &nextthink);

/**
* Called immediately after the resurrection of the player
*
* @param id            Player index (who was reborn)
* @param friend        Player index by which the player was resurrected
*
* @noreturn
*/
forward RT_GotRespawn(const id, const friend);

/**
* Called when config file is parsing..
*
* @param jsonMain      JSON Handle
*
* @note This must called only in plugin_precache() forward.
*
* @noreturn
*/
forward RT_ParseConfigFile(JSON:jsonMain);
Сверху Снизу