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

Effect Calculator 2.1

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #1
inklesspen добавил(а) новый ресурс:

Effect Calculator - Надоело, что все плагины просчитывают скорость по-своему? Тогда мы идем к вам!

Плагин был написан даже избежать конфликтов плагинов, устанавливающих свою скорость игрокам, часто в итоге ухудшая ситуацию
Он позволяет сторонним плагинам просчитывать отдельные множители и добавлять свои эффекты в процентном соотношении (1 плагин дает +20% скорости, другой +30%, итого у игрока +50% скорости)
Работает он не только со скоростью, а с любыми своего рода "эффектами"

Как работает?
Для каждого "эффекта" (другого названия не нашел) просчитываются свои множители (каждый...

Узнать больше об этом ресурсе...
 

NaN

FPE_INTDIV_TRAP
Сообщения
1,513
Реакции
1,487
Чет немножко не понял, какие "эффекты" поддерживаются?
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #3
Чет немножко не понял, какие "эффекты" поддерживаются?
Когда писал описание, я был ужасно сонный) Попробую иначе описать весь этот бред:
Каждый плагин для урона или скорости использует свои значения
Для урона это не критично, ведь все перемножения спокойно перемножаются, а вот для скорости - да
Обычно когда ставишь несколько плагинов на скорость (Зомби Мод, там выставляется скорость в зависимости от класса и скорость с ножом в руках (откуда ж знать автору оригинальную скорость, если она меняется))
То в итоге скорость выставляется неправильно, в основном стоит меньше, чем нужно

Ядро может запускать запрос на вычисление коэффициента по названию коэфффициента
У каждого коэффициента есть определенное количество множителей, у которых есть тоже свои названия (все коэффициенты и множители равны 1.0 без каких-либо вмешательств)
Сторонние плагины, использующие ядро, в основном изменяют один конкретный конкретный множитель конкретного коэффициента
Также плагины могут добавлять свои множители в коэффициент (регистрации не надо, просто указать имя коэффициента и имя множителя, ядро сам все регистрирует в памяти и запускает)
Когда ядро вычислил все множители коэффициента - он их перемножает, получая общий коэффициент, и выдает его плагину, который запустил вычисление коэффициента

Однажды мне требовалось написать плагин, ускоряющий игрока, когда он берет в руки нож
И проблемой оказалась именно динамически меняющаяся скорость (у него там стоял Shop Core с бустами от предметов: надел плащ - +1000 к скорости и т.д.)
И это простой пример со скоростями, которые меня (и наверно не только меня) бесят:
PHP:
#include <sdkhooks>
#include <effectcalc>

public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn)
}

public void EventSpawn(Event event, const char[] name, bool dbc)
{
    static int temp[1]
    int client = GetClientOfUserId(event.GetInt("userid"))
    if(client)
    {
        temp[0] = client
        SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", ECalc_Run2("speed", temp, 1))
    }
}
#include <effectcalc>

public void OnPluginStart()
{
if(LibraryExists("effectcalc"))
ECalc_Hook("speed", "base", ModifySpeed)
}

public void OnLibraryAdded(const char[] name)
{
if(!strcmp(name, "effectcalc"))
ECalc_Hook("speed", "base", ModifySpeed)
}

public void ModifySpeed(any[] data, int size, float &value)
{
if(size && 0 < data[0] <= MaxClients && GetClientTeam(data[0]) == 2)
{
value += 0.2
}
}
#include <effectcalc>
#include <sdkhooks>

public void OnPluginStart()
{
if(LibraryExists("effectcalc"))
ECalc_Hook("speed", "base", ModifySpeed)
}

public void OnLibraryAdded(const char[] name)
{
if(!strcmp(name, "effectcalc"))
ECalc_Hook("speed", "base", ModifySpeed)
}

public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_WeaponSwitchPost, WeaponSwitchPost)
}

public void WeaponSwitchPost(int client, int args) // обновляем скорость при смене оружия
{
static int temp[1]
temp[0] = client
SetEntDataFloat(client, Prop_Send, "m_flLaggedMovementValue", ECalc_Run2("speed", temp, 1))
}

public void ModifySpeed(any[] data, int size, float &value)
{
if(size && 0 < data[0] <= MaxClients)
{
int weapon = GetEntPropEnt(data[0], Prop_Send, "m_hActiveWeapon")
if(weapon == -1)
return
char sBuffer[8]
GetEntityNetClass(weapon, sBuffer, sizeof sBuffer)
if(!strncmp(sBuffer, "CKnife", 6))
value += boost
}
}
Эти значения не будут перемножаться или перекрываться: они будут складываться
И один, и второй плагин изменяет коэффициент "speed", а именно - множитель "base"
Смысл именно в том, чтобы разные плагины не мешали работе друг-друга, а вместе работали и давали эффект
PHP:
#include <sdkhooks>

public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn)
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_WeaponSwitchPost, WeaponSwitchPost)
}

public void WeaponSwitchPost(int client, int args) // обновляем скорость при смене оружия
{
    SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", CalculateSpeed(client))
}

public void EventSpawn(Event event, const char[] name, bool dbc) // устанавливаем скорость при спавне игрока
{
    int client = GetClientOfUserId(event.GetInt("userid"))
    if(client)
        SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", CalculateSpeed(client))
}

public float CalculateSpeed(int client) // вычисляем коэффициент скорости
{
    float value = 1.0
    int weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon")
    if(weapon != -1)
    {
        char sBuffer[8]
        GetEntityNetClass(weapon, sBuffer, sizeof sBuffer)
        if(!strncmp(sBuffer, "CKnife", 6))
            value += 0.3
    }
   
    if(GetClientTeam(client) == 2)
        value += 0.2
    return value
}
Я только что понял, что это идеальное сочетание для серверов с Deathrun

Само ядро ясень пень не для простых пользователей, но я скоро наклепаю еще плагинов, ту же скорость или изменение урона
Коэффициенты нигде не регистрируются, нигде не прописаны, но будем надеется, что все скриптеры придут к взаимосоглашению на основе моих тестовых плагинов
Сообщения автоматически склеены:

Делал тестовые плагины для новых модулей и поймал себя на мысли, что я просто копирую содержимое плагина, меняя 2 строки
Нет, серьезно, вы только посмотрите на эти 3 плагина:
PHP:
#include <effectcalc>

public void OnPluginStart()
{
    if(LibraryExists("effectcalc"))
    {
        ECalc_Hook("gravity", "base", ModifyStat)
    }
}

public void OnLibraryAdded(const char[] name)
{
    if(!strcmp(name, "effectcalc"))
    {
        ECalc_Hook("gravity", "base", ModifyStat)
    }
}

public void ModifyStat(any[] data, int size, float &value)
{
    value += 0.333333 // +33.3333%
}
PHP:
#include <effectcalc>

public void OnPluginStart()
{
    if(LibraryExists("effectcalc"))
    {
        ECalc_Hook("speed", "base", ModifyStat)
    }
}

public void OnLibraryAdded(const char[] name)
{
    if(!strcmp(name, "effectcalc"))
    {
        ECalc_Hook("speed", "base", ModifyStat)
    }
}

public void ModifyStat(any[] data, int size, float &value)
{
    value += 0.333333 // +33.3333%
}
PHP:
#include <effectcalc>

public void OnPluginStart()
{
    if(LibraryExists("effectcalc"))
    {
        ECalc_Hook("longjump", "base", ModifyStat)
    }
}

public void OnLibraryAdded(const char[] name)
{
    if(!strcmp(name, "effectcalc"))
    {
        ECalc_Hook("longjump", "base", ModifyStat)
    }
}

public void ModifyStat(any[] data, int size, float &value)
{
    value += 0.333333 // +33.3333%
}
Никогда еще создание бустов не было настолько легким
 
Последнее редактирование:

zer0

Участник
Сообщения
178
Реакции
27
Этот плагин будет хорош с плагином, который дает бонусы к вещам из шопа (Крылья с гравитацией, шапка с уроном и тд)
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #5
Этот плагин будет хорош с плагином, который дает бонусы к вещам из шопа (Крылья с гравитацией, шапка с уроном и тд)
К сожалению я даже не знаю, где его найти, чтобы переписать под этот плагин
А если и узнаю - это приват приватный, который нельзя выкладывать в общий доступ
 

zer0

Участник
Сообщения
178
Реакции
27
🙂
 

Вложения

  • Equipments + speed, armor,credits, hp, regenarmor, regenhp, gravity.zip
    31.9 КБ · Просмотры: 15

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #11

Вложения

  • 1593950142665.png
    1593950142665.png
    41.1 КБ · Просмотры: 50
  • Мне нравится
Реакции: NaN

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #12
inklesspen обновил(а) ресурс Effect Calculator новой записью:

Изменения в API, сломанная совместимость, натив применения эффекта

СТАРОЕ API СЛОМАНО
Модули под версию 1.Х не совместимы с версией 2.Х и наоборот

Написать прослойку возможность есть, названия старых нативов не используются, но если у вас есть силы написать такое API, лучше потратить их на внесение изменений под новое API. Однако если будет слишком много запросов, придется выпустить прослойку между старыми модулями и новым ядром
Изменения в API:
Старый добрый ECalc_Hook превратился в...

Узнать больше об этом обновлении...
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
  • Автор ресурса
  • #13
Сверху Снизу