Написание плагинов

alexandr200121

Участник
Сообщения
41
Реакции
1
@alexandr200121, сделал автооткрытие дверей при отсутствии живых игроков за спецназ.
Заодно пофиксил открытие дверей (iEnt не должна быть глобальной и её значение должно сбрасываться после каждого while() или перед ним).
Благодарю
Сообщения автоматически склеены:

Написать модуль для vip - Ядро плагина - [VIP] Core :
VIP [Laser Mines]:
// Модель мины (0 = откл)
lm_model "models/weapons/w_eq_smokegrenade_thrown.mdl"
 
// Корректировка углов модели. Значения будут добавлены к текущим.
lm_model_correction_angles "-90 0 0"
 
// Модель лазера
lm_laser_model "sprites/purplelaser1.vmt"
 
//
 
// Звук лазера (0 = откл)
lm_laser_sound "ambient/tones/lab_loop1.wav"
 
// Звук искр (0 = откл)
lm_sparks_sound "ambient/energy/electric_loop.wav"
 
// Звук убийства (0 = откл)
lm_kill_sound "weapons/hegrenade/explode5.wav"
 
// Громкость от 0.1 до 1.0
lm_sound_volume "1.0"
 
//
 
// Ширина лазера от 1 до 25
lm_laser_width "1"
 
// Урон, который наносит мина.
lm_dmg "999"
 
// 1 = лазер убивает всех игроков
// 2 = всех, кроме владельца
// 3 = только противоположную команду
lm_laser_dmg_mode "3"
 
// 0 = откл, 1 = искры, 2 = искры + звук
lm_sparks "2"
 
// 1 = эффект растворения
lm_kill_dissolve "1"
 
// 1 = эффект взрыва
lm_kill_explode "1"
 
// 1 = эффект огня
lm_kill_fire "1"
 
//
 
// Здоровье мины. Если > 0, то будет разрушаемой.
lm_health "100"
 
// 1 = мина получает урон только от владельца
// 2 = только от своей команды
// 3 = только от противоположной команды
// 4 = урон от любого игрока
lm_mine_dmg_mode "4"
 
// Авто-уничтожение мины через 'x' сек (0 = откл)
lm_life "0"
 
// 1 = удалить мину после взрыва
lm_kill_remove "1"
 
// Владелец мины может подобрать/обезвредить свою мину на E (1 = вкл)
lm_pickup "1"
 
// Расстояние от игрока до создаваемой мины должно быть не больше 'x' юнитов (0 = откл)
// Запрещает создавать слишком далеко.
lm_distance_limit "500.0"
 
// Если рядом есть жертва, то создать мину нельзя (0 откл).
lm_distance_enemy_limit "150"
 
// Цвет мины/лазера террористов
lm_color_t "255 0 0 255"
 
// Цвет мины/лазера контр-террористов
lm_color_ct "0 0 255 255"
Пытался написать, что-то на подобии - не получилось. См. файл.
 

Вложения

  • 1747899236853.png
    1747899236853.png
    88.5 КБ · Просмотры: 54
  • ZR_VIP_Laser_Mines_Bonus.sp
    7.2 КБ · Просмотры: 5
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@alexandr200121, типа такого нужно?
 

alexandr200121

Участник
Сообщения
41
Реакции
1
@alexandr200121, типа такого нужно?
Нет отдельный модуль дающий возможность ставить лазеры вип игрокам и убирать их. Количество лазеров которое можно поставить регулируемое в cfg или в вип группе. Ну и настройки самого лазера как в спойлера.
 
Последнее редактирование:

rgba

Участник
Сообщения
132
Реакции
14
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
 

khood

Участник
Сообщения
214
Реакции
51
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
У меня есть аналог вышеупомянутого плагина, писать можно как с сервера так и на сервер, цена 2к (так же есть уведомления о банах, мутах, разбанах и тд, показ онлайна, вывод в тг репортов и показ вип игроков с сервера в тг)
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?

Идёт в тестовом режиме, но бесплатно
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Нужен простой плагин который блокирует урон по союзнику с ножа.
 

khood

Участник
Сообщения
214
Реакции
51
Нужен простой плагин который блокирует урон по союзнику с ножа.
C-подобный:
#include <sdktools>
#include <sdkhooks>

public void OnPluginStart()
{
    for (int client = 1; client <= MaxClients; client++)
    {
        if (IsClientInGame(client))
        {
            SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
        }
    }
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    char weapon[8];
 
    if (client > 0 && client <= MaxClients && attacker > 0 && attacker <= MaxClients && attacker == inflictor)
    {
        if (GetClientTeam(client) == GetClientTeam(attacker))
        {
            GetClientWeapon(attacker, weapon, sizeof(weapon));
            if (StrContains(weapon, "knife") != -1)
            {
                damage = 0.0;
                return Plugin_Changed;
            }
        }
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
public void OnPluginStart()
{
for (int client = 1; client <= MaxClients; client++)
{
if (IsClientInGame(client))
{
SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}
}
}
Спасибо плагин сейчас протестирую. Просто интересно а зачем делать перебор. И если надо зачем именно при старте плагина может лучшее это делать при старте карты?
 

khood

Участник
Сообщения
214
Реакции
51
Спасибо плагин сейчас протестирую. Просто интересно а зачем делать перебор. И если надо зачем именно при старте плагина может лучшее это делать при старте карты?
OnMapStart() вызывается каждую смену карты
Если плагин уже работает, зачем повторно устанавливать те же хуки?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@khood, я бы так сделал, чтобы и с CS:GO совместимость была:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

public void OnPluginStart()
{
    for(int i; ++i <= MaxClients;) if(IsClientInGame(i)) OnClientPutInServer(i);
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client) || (!IsClientSourceTV(client) && !IsClientReplay(client)))
        SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(attacker != inflictor || client < 1 || MaxClients < client || attacker < 1 || MaxClients < attacker
    || GetClientTeam(client) != GetClientTeam(attacker))
        return Plugin_Continue;

    static char weapon[16];
    GetClientWeapon(attacker, weapon, sizeof(weapon));
    if(strncmp(weapon[7], "knife", 5, false) && strncmp(weapon[7], "bayonet", 7, false))
        return Plugin_Continue;

    damage = 0.0;
    return Plugin_Changed;
}
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Нужен плагин при ставне выводит путь к .mdl скина на игроке в чат или консоль или туда и туда.
 

danil253467

💘Italo-Disco & Neon One Love💘
Сообщения
90
Реакции
52
Нужен плагин при ставне выводит путь к .mdl скина на игроке в чат или консоль или туда и туда.
PHP:
public void OnPluginStart()
{
    HookEvent("player_spawn", OnSpawn);
}

void OnSpawn(Event event, const char[] name, bool silent)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(GetClientTeam(client) > 1)
    {
        char sModelName[PLATFORM_MAX_PATH];
        GetEntPropString(client, Prop_Send, "m_ModelName", sModelName, sizeof(sModelName));
        
        PrintToChat(client, "Путь к вашей модели: %s", sModelName);
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@oleg_nelasy, а для чего именно при спавне? Можно же в любой момент узнать через некоторые плагины.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@oleg_nelasy, а для чего именно при спавне? Можно же в любой момент узнать через некоторые плагины.
Да просто не охото команды писать. Если надо будет переделаю на чат команду. Нужно просто узнать путь до стандартного скина.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Да просто не охото команды писать.
Их можно забиндить и вызывать простым нажатием кнопки.
Хотя у меня использовался плагин, который показывал много информации в меню (и писал эту информацию мне в чат при выборе соответствующего пункта):
А тут я выкладывал исправленый инклюд плагина, где я улучшил само это меню (и добавил команду вызова этого меню):

Ну и ещё можно включить sv_cheats и командой самой игры глянуть (команду не помню), емнип.
Сообщения автоматически склеены:

всего-то 9 лет назад эту модификацию там запостил =)
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@khood, я бы так сделал, чтобы и с CS:GO совместимость была:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

public void OnPluginStart()
{
    for(int i; ++i <= MaxClients;) if(IsClientInGame(i)) OnClientPutInServer(i);
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client) || (!IsClientSourceTV(client) && !IsClientReplay(client)))
        SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(attacker != inflictor || client < 1 || MaxClients < client || attacker < 1 || MaxClients < attacker
    || GetClientTeam(client) != GetClientTeam(attacker))
        return Plugin_Continue;

    static char weapon[16];
    GetClientWeapon(attacker, weapon, sizeof(weapon));
    if(strncmp(weapon[7], "knife", 5, false) && strncmp(weapon[7], "bayonet", 7, false))
        return Plugin_Continue;

    damage = 0.0;
    return Plugin_Changed;
}
Заметил такую проблему. Урон блокирует но игрок по которому ударили получает замедление возможно убрать этот эффект?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@oleg_nelasy, модно попробовать хукать не получнъение урона, а даже до него. Может быть и поможет.
Но это точно не сегодня.
 
Сверху Снизу