Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Effect Calculator - Надоело, что все плагины просчитывают скорость по-своему? Тогда мы идем к вам!
Плагин был написан даже избежать конфликтов плагинов, устанавливающих свою скорость игрокам, часто в итоге ухудшая ситуацию
Он позволяет сторонним плагинам просчитывать отдельные множители и добавлять свои эффекты в процентном соотношении (1 плагин дает +20% скорости, другой +30%, итого у игрока +50% скорости)
Работает он не только со скоростью, а с любыми своего рода "эффектами"
Как работает?
Для каждого "эффекта" (другого названия не нашел) просчитываются свои множители (каждый...
Когда писал описание, я был ужасно сонный) Попробую иначе описать весь этот бред:
Каждый плагин для урона или скорости использует свои значения
Для урона это не критично, ведь все перемножения спокойно перемножаются, а вот для скорости - да
Обычно когда ставишь несколько плагинов на скорость (Зомби Мод, там выставляется скорость в зависимости от класса и скорость с ножом в руках (откуда ж знать автору оригинальную скорость, если она меняется))
То в итоге скорость выставляется неправильно, в основном стоит меньше, чем нужно
Ядро может запускать запрос на вычисление коэффициента по названию коэфффициента
У каждого коэффициента есть определенное количество множителей, у которых есть тоже свои названия (все коэффициенты и множители равны 1.0 без каких-либо вмешательств)
Сторонние плагины, использующие ядро, в основном изменяют один конкретный конкретный множитель конкретного коэффициента
Также плагины могут добавлять свои множители в коэффициент (регистрации не надо, просто указать имя коэффициента и имя множителя, ядро сам все регистрирует в памяти и запускает)
Когда ядро вычислил все множители коэффициента - он их перемножает, получая общий коэффициент, и выдает его плагину, который запустил вычисление коэффициента
Однажды мне требовалось написать плагин, ускоряющий игрока, когда он берет в руки нож
И проблемой оказалась именно динамически меняющаяся скорость (у него там стоял Shop Core с бустами от предметов: надел плащ - +1000 к скорости и т.д.)
И это простой пример со скоростями, которые меня (и наверно не только меня) бесят:
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))
}
Эти значения не будут перемножаться или перекрываться: они будут складываться
И один, и второй плагин изменяет коэффициент "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%
}
Никогда еще создание бустов не было настолько легким
К сожалению я даже не знаю, где его найти, чтобы переписать под этот плагин
А если и узнаю - это приват приватный, который нельзя выкладывать в общий доступ
СТАРОЕ API СЛОМАНО
Модули под версию 1.Х не совместимы с версией 2.Х и наоборот
Написать прослойку возможность есть, названия старых нативов не используются, но если у вас есть силы написать такое API, лучше потратить их на внесение изменений под новое API. Однако если будет слишком много запросов, придется выпустить прослойку между старыми модулями и новым ядром
Изменения в API: