random.81
Участник
- Сообщения
- 496
- Реакции
- 819
Используй плагин No block v1.4.2, там всё это есть.как мне убрать команду "!block"
// 1 включает,0 отключает столкновение с игроками
// -
// Default: "1"
sm_noblock "1"
ресурсом оформиВсем привет не знаю актуален ли еще этот плагин,но убрал предупреждения от компилятора и добавил авто создание конфига.
Описание: Плагин позволяет игрокам проходить друг друга на сквозь, рекомендуем для серверов с динамичными режимами игры (Surf, GunGame, DeathMatch).
ОффтопХочу научиться простейшим вещам
Плагин был скомпилирован на sourcemod-1.10.0-git6490
Установка:
1) Поместить noblock.smx по пути /addons/sourcemod/plugins
2) (Не обязательно) Поместить noblock.sp по пути /addons/sourcemod/scripting
3) Перезапустить сервер
4) Бинго)
От плагина создастся конфиг по пути cfg/sourcemod/noblock.cfg
C-подобный:// 1 включает,0 отключает столкновение с игроками // - // Default: "1" sm_noblock "1"
new value = !!StringToInt(newValue);
if(value == 0)
Автор random.81babka68, создавать конфиг ради одного квара - это такое.
Лучше просто прописать значение квара в server.cfg.
Флаг FCVAR_REPLICATED для квара - это совершенно лишнее.
Плюс у тебя слишком много ненужных действий в коде.
Ещё создаёшь глобальный хэндл для квара, но используешь его только локально в одной функции.
Вот этого я не понял:Получаешь целочисленное значение, превращаешь его в булево и сохраняешь снова в целочисленное. А потом используешь как булево. Феноменально.C-подобный:new value = !!StringToInt(newValue); if(value == 0)
И всё это на старом синтаксисе.
убрал предупреждения от компилятора
#pragma semicolon 1
#pragma newdecls required
int m_CollisionGroup;
public void OnPluginStart()
{
m_CollisionGroup = FindSendPropInfo("CBaseEntity", "m_CollisionGroup");
if(m_CollisionGroup == -1) SetFailState("Failed to get offset for CBaseEntity::m_CollisionGroup");
ConVar cvar = CreateConVar("sm_noblock", "1", "1 - включает, 0 - отключает столкновения между игроками", FCVAR_NOTIFY, true, _, true, 1.0);
HookConVarChange(cvar, CVarChange);
CVarChange(cvar, NULL_STRING, NULL_STRING);
}
public void CVarChange(ConVar cvar, const char[] oldValue, const char[] newValue)
{
static bool hooked;
if(hooked == cvar.BoolValue) return;
hooked = !hooked;
if(hooked)
{
HookEvent("player_spawn", Event_Spawn);
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetCollision(i);
}
else
{
UnhookEvent("player_spawn", Event_Spawn);
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetCollision(i, 5);
}
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(GetEventInt(event, "userid"));
if(client) SetCollision(client);
}
stock void SetCollision(const int client, const int collision = 2)
{
if(IsPlayerAlive(client)) SetEntData(client, m_CollisionGroup, collision, _, true);
}
Не спорю),но на момент тестов ошибок выявлено не было,плагин свою задачу выполняет,он позволяет игрокам проходить сквозь друг друга.babka68, там больше проблема не в версии синтаксиса, а в самом алгоритме работы плагина.
Сообщения автоматически склеены:
У меня тоже код не идеальный (не предусмотрена выгрузка плагина, например).
Работает,да и ладно![]()
Плагин позволяет игрокам проходить друг друга на сквозь, рекомендуем для серверов с динамичными режимами игры (Surf, GunGame, DeathMatch).
Примечание: Плагин был скомпилирован на sourcemod-1.10.0-git6490
Мной были внесены изменения в исходный код плагина,а именно:
[ATTACH...
- Разложил весь по нужным директориям
- Добавил в архив фото
- Добавил в архив инструкцию по установке