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

Mr.Black

Участник
Сообщения
146
Реакции
57
Привет. Нужен телепорт игрока на спавн по команде.
 

Truyn

Цынитель
Сообщения
845
Реакции
236
@Grey83 у вас есть рабочая блокировка +left +right у меня имеется такова,но она кикает.Хотелось бы просто чтобы не срабатывало.Или хотя бы что то одно заблочить либо +left либо +right

Был бы очень вам благодарен
 

alexmy

Участник
Сообщения
252
Реакции
9
Ребята как отловить когда игрок присел?
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,646
Реакции
2,724
@Oligarx1488, так тебе +left и +right или +moveleft и +moveright?
Если первое то вот это будет блочить срабатывание этих команд:
PHP:
#include <sdktools_hooks>

public Action OnPlayerRunCmd(int client, int &buttons)
{
    static bool block;
    block = false;

    if(buttons & IN_LEFT)
    {
        buttons &= ~IN_LEFT;
        block = true;
    }

    if(buttons & IN_RIGHT)
    {
        buttons &= ~IN_RIGHT;
        block = true;
    }

    return block ? Plugin_Changed : Plugin_Continue;
}
 

Вложения

  • block_left_right.sp
    332 байт · Просмотры: 5
  • block_left_right SM1.8.smx
    3.5 КБ · Просмотры: 0
  • block_left_right SM1.10.smx
    2.6 КБ · Просмотры: 1

Boeing 767

умер до 2022 года
Сообщения
491
Реакции
687
Твой пост нерабочие 2 метода,а ниже версия с киком :/
Делал когда-то давно , не самый оптимальный вариант :|, но в ксс рабочий точно, проверь на ксго
Визуально у игрока экран то же не поворачивается , но при этом экран игрока трясет.
PHP:
#include <sdktools>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3])
{
    static float LAngels[65];
    if(IsPlayerAlive(client) && !IsFakeClient(client) && (buttons & IN_LEFT) > 0 || (buttons & IN_RIGHT) > 0 )
    {
        angles[1] = LAngels[client];
        TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
    }
    LAngels[client] = angles[1];
}

Без тряски экрана, при +left или +right игрок якобы поворачивает , но на деле просто прыгает вперед.
PHP:
#include <sdktools>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3])
{
    static float lang[65];
    if(IsPlayerAlive(client) && (buttons & IN_LEFT) > 0 || (buttons & IN_RIGHT) > 0 )
        angles[1] = lang[client];
    lang[client] = angles[1];
}
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
721
Реакции
266
Из-за предикции клиент будет дергаться и блинковаться обратно, ну так у него будет выглядить во всяком случае. Почему вам не пришла идея просто поставить MOVETYPE_NONE?
 

IIIyXeR

Участник
Сообщения
140
Реакции
19
Нужен модуль к лк от импульса. Покупка доступа к команде по флагу. Такое реально?
 

Джокер

Участник
Сообщения
3
Реакции
0
Подскажите код, хочу сделать что бы когда игрок получал подарок в конце карты shop ball, его убивало
 

Truyn

Цынитель
Сообщения
845
Реакции
236
@Oligarx1488, так тебе +left и +right или +moveleft и +moveright?
Если первое то вот это будет блочить срабатывание этих команд:
PHP:
#include <sdktools_hooks>

public Action OnPlayerRunCmd(int client, int &buttons)
{
    static bool block;
    block = false;

    if(buttons & IN_LEFT)
    {
        buttons &= ~IN_LEFT;
        block = true;
    }

    if(buttons & IN_RIGHT)
    {
        buttons &= ~IN_RIGHT;
        block = true;
    }

    return block ? Plugin_Changed : Plugin_Continue;
}
Не блочит.
--- Добавлено позже ---
Делал когда-то давно , не самый оптимальный вариант :|, но в ксс рабочий точно, проверь на ксго
Визуально у игрока экран то же не поворачивается , но при этом экран игрока трясет.
PHP:
#include <sdktools>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3])
{
    static float LAngels[65];
    if(IsPlayerAlive(client) && !IsFakeClient(client) && (buttons & IN_LEFT) > 0 || (buttons & IN_RIGHT) > 0 )
    {
        angles[1] = LAngels[client];
        TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
    }
    LAngels[client] = angles[1];
}

Без тряски экрана, при +left или +right игрок якобы поворачивает , но на деле просто прыгает вперед.
PHP:
#include <sdktools>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3])
{
    static float lang[65];
    if(IsPlayerAlive(client) && (buttons & IN_LEFT) > 0 || (buttons & IN_RIGHT) > 0 )
        angles[1] = lang[client];
    lang[client] = angles[1];
}
Твой вариант самолетик вроде рабочий.

Ребят,Grey83 и Samoletik1337. Можно ли сделать чтобы +left к примеру не работало а +right работало.
Мне надо именно вот одно из них заблокировать.

И вопрос по +jump можно ли как то заблокировать чтобы обычный прыжок работал а +jump нет?Нужно для сервера zombie чтобы на колесико не могли биндить +jump
 
Последнее редактирование:

Grey83

Ленивая и невнимательная жопа
Сообщения
4,646
Реакции
2,724
какая игра, какая версия SM? Должно блочить на SM1.7+
чтобы обычный прыжок работал а +jump нет
+jump это и есть обычный прыжок (сам посмотри в клиенте по пути ...\cfg\config.cfg), разве что можно сделать кулдаун на использование команды, чтобы не срабатывало чаще, чем пропишешь в конфиге
Можно ли сделать чтобы +left к примеру не работало а +right работало.
можно: просто удаляешь проверку buttons & IN_LEFT
 

Truyn

Цынитель
Сообщения
845
Реакции
236
какая игра, какая версия SM? Должно блочить на SM1.7+
+jump это и есть обычный прыжок (сам посмотри в клиенте по пути ...\cfg\config.cfg), разве что можно сделать кулдаун на использование команды, чтобы не срабатывало чаще, чем пропишешь в конфигеможно: просто удаляешь проверку buttons & IN_LEFT
csgo,sm 1.9
 

Ровный Кент

Участник
Сообщения
703
Реакции
119
Напишите пожалуйста пример добавления/уменьшения урона для админа (по админу), пример :

Админ с флагом Z наносит урон по игроку и он умножается (урон 100 * 1.5 = 150)
Игрок наносит урон по админу с флагом Z то урон делиться (урон 100 / 1.5 = 66.666666)

Игра [csgo], спасибо.
 

IIIyXeR

Участник
Сообщения
140
Реакции
19
Напишите пожалуйста пример добавления/уменьшения урона для админа (по админу), пример :

Админ с флагом Z наносит урон по игроку и он умножается (урон 100 * 1.5 = 150)
Игрок наносит урон по админу с флагом Z то урон делиться (урон 100 / 1.5 = 66.666666)

Игра [csgo], спасибо.
Если стоит випка риковская, то там есть модуль, которые позволяет настроить наносимый, и входящий урон.
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,646
Реакции
2,724
@Ровный Кент,
PHP:
#include <sdkhooks>

static const float fDmgMult = 1.5;

public void OnClientPostAdminCheck(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(!attacker || !victim || victim == attacker) return Plugin_Continue;

    static AdminId aid, vid;
    if((aid = GetUserAdmin(attacker)) == INVALID_ADMIN_ID && (vid = GetUserAdmin(victim)) != INVALID_ADMIN_ID)
        damage /= fDmgMult;
    else if(aid != INVALID_ADMIN_ID && vid == INVALID_ADMIN_ID)
        damage *= fDmgMult;
    else return Plugin_Continue;

    return Plugin_Changed;
}
--- Добавлено позже ---
Если нужно именно с флагом, то ещё нужно добавить проверку на флаг
 

Ровный Кент

Участник
Сообщения
703
Реакции
119
PHP:
#define PATH "" // путь к звуку

public void OnPluginStart()
{
   HookEvent("player_death", view_as<EventHook>(PlayerDeath));
}

void PlayerDeath(Event hEvent)
{
   ClientCommand(GetClientOfUserId(hEvent.GetInt("attacker")), "play %s", PATH);
}


stuck sourcemod | Давай я поищу в Google вместо тебя

Появляется проблема, (если стоят плагины типа round end sound) :

Последнему игроку убившего врага не воспроизводиться музыка. как будто "play %s" все перебивает...
 

nyood

e-val
Сообщения
1,069
Реакции
710
Появляется проблема, (если стоят плагины типа round end sound) :

Последнему игроку убившего врага не воспроизводиться музыка. как будто "play %s" все перебивает...
PHP:
#define PATH "" // путь к звуку

public void OnPluginStart()
{
  HookEvent("player_death", view_as<EventHook>(PlayerDeath));
}

void PlayerDeath(Event hEvent)
{
  if(isLastAlive())
    return;
 
  ClientCommand(GetClientOfUserId(hEvent.GetInt("attacker")), "play %s", PATH);
}

bool isLastAlive()
{
  int count;

  for(int i = 1; i <= MaxClients; i++)
  {
    if(IsClientInGame(i) && IsPlayerAlive(i))
      count++;
  }
  return count < 2;
}
 
Сверху