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

ololoex

Участник
Сообщения
123
Реакции
51
@ololoex,
PHP:
L 11/25/2017 - 09:08:32: SourceMod error session started
L 11/25/2017 - 09:08:32: Info (map "zm_dust2v2_v3") (file "errors_20171125.log")
L 11/25/2017 - 09:08:32: [SM] Exception reported: Invalid timer handle 42c039b (error 3)
L 11/25/2017 - 09:08:32: [SM] Blaming: zombiereloaded/zr_change_fov.smx
L 11/25/2017 - 09:08:32: [SM] Call stack trace:
L 11/25/2017 - 09:08:32: [SM]   [0] KillTimer
L 11/25/2017 - 09:08:32: [SM]   [1] Line 43, C:\Users\User\YandexDisk\Mr. GiG Servers\Compil\Компилятор\ZR Compil\zr_change_fov.sp::OnClientDisconnect

C-подобный:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <zombiereloaded>

public Plugin myinfo =
{
    name            = "[ZR] Change FOV",
    author          = "Extr1m (Michail)",
    description     = "Adds a unique class of zombies",
    version         = "1.1",
    url             = "https://sourcemod.net/"
};

#define DEFAULT_FOV             90

ConVar gCV_PEnabled = null;
ConVar gCV_PFovZombie = null;

bool     gB_PEnabled = true;
int     gI_PFovZombie;

Handle SpawnTimer[MAXPLAYERS+1];

public void OnPluginStart()
{   
    HookEvent("player_spawn", Event_PlayerSpawn);
    
    gCV_PEnabled     =     CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0);
    gCV_PFovZombie     =     CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0);
    
    gCV_PEnabled.AddChangeHook(ConVarChange);
    gCV_PFovZombie.AddChangeHook(ConVarChange);
    
    gB_PEnabled     = gCV_PEnabled.BoolValue;
    gI_PFovZombie     = gCV_PFovZombie.IntValue;
}

public void OnClientDisconnect(int client)
{
    if(SpawnTimer[client] != null)
    {
        KillTimer(SpawnTimer[client]);
        SpawnTimer[client] = null;
    }
}

public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    gB_PEnabled     = gCV_PEnabled.BoolValue;
    gI_PFovZombie     = gCV_PFovZombie.IntValue;
}

public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
    
    SpawnTimer[client] = CreateTimer(0.2, SpawnPlayer, client);
}

public Action SpawnPlayer(Handle timer, any client)
{
    if(gB_PEnabled && IsPlayerAlive(client))
    {
        if(ZR_IsClientHuman(client))
        {
            SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
            SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
        }
        else
        {   
            SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
            SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
        }
    }
    SpawnTimer[client] = null;
}

public ZR_OnClientHumanPost(int client, bool respawn, bool protect)
{
    if(gB_PEnabled)
    {
        SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
        SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
    }
}

public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn)
{
    if(gB_PEnabled)
    {   
        SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
        SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
    }
}
 

Вложения

  • zr_change_fov.sp
    2.4 КБ · Просмотры: 6
  • zr_change_fov.smx
    5.2 КБ · Просмотры: 4

KonveeR

Hanzo hasashi
Сообщения
1,639
Реакции
667
@ololoex,
PHP:
SourceMod error session started
L 11/25/2017 - 15:07:04: Info (map "zm_continuity_v2fix") (file "errors_20171125.log")
L 11/25/2017 - 15:07:04: [SM] Exception reported: Client 3 is not in game
L 11/25/2017 - 15:07:04: [SM] Blaming: zombiereloaded/zr_change_fov.smx
L 11/25/2017 - 15:07:04: [SM] Call stack trace:
L 11/25/2017 - 15:07:04: [SM]   [0] IsPlayerAlive
L 11/25/2017 - 15:07:04: [SM]   [1] Line 63, C:\Users\User\YandexDisk\Mr. GiG Servers\Compil\Компилятор\ZR Compil\zr_change_fov.sp::SpawnPlayer
L 11/25/2017 - 15:07:05: [SM] Exception reported: Client 4 is not in game
 

ololoex

Участник
Сообщения
123
Реакции
51
@ololoex,
PHP:
SourceMod error session started
L 11/25/2017 - 15:07:04: Info (map "zm_continuity_v2fix") (file "errors_20171125.log")
L 11/25/2017 - 15:07:04: [SM] Exception reported: Client 3 is not in game
L 11/25/2017 - 15:07:04: [SM] Blaming: zombiereloaded/zr_change_fov.smx
L 11/25/2017 - 15:07:04: [SM] Call stack trace:
L 11/25/2017 - 15:07:04: [SM]   [0] IsPlayerAlive
L 11/25/2017 - 15:07:04: [SM]   [1] Line 63, C:\Users\User\YandexDisk\Mr. GiG Servers\Compil\Компилятор\ZR Compil\zr_change_fov.sp::SpawnPlayer
L 11/25/2017 - 15:07:05: [SM] Exception reported: Client 4 is not in game
Ну это уже точно последний)

C-подобный:
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <zombiereloaded>

public Plugin myinfo =
{
    name            = "[ZR] Change FOV",
    author          = "Extr1m (Michail)",
    description     = "Adds a unique class of zombies",
    version         = "1.1",
    url             = "https://sourcemod.net/"
};

#define DEFAULT_FOV             90

ConVar gCV_PEnabled = null;
ConVar gCV_PFovZombie = null;

bool     gB_PEnabled = true;
int     gI_PFovZombie;

Handle SpawnTimer[MAXPLAYERS+1];

public void OnPluginStart()
{   
    HookEvent("player_spawn", Event_PlayerSpawn);
    
    gCV_PEnabled     =     CreateConVar("sm_fov_enabled", "1", "Включить/Выключить плагин", 0, true, 0.0, true, 1.0);
    gCV_PFovZombie     =     CreateConVar("sm_fov_number", "110.0", "Значение FOV", 0, true, 0.0, true, 200.0);
    
    gCV_PEnabled.AddChangeHook(ConVarChange);
    gCV_PFovZombie.AddChangeHook(ConVarChange);
    
    gB_PEnabled     = gCV_PEnabled.BoolValue;
    gI_PFovZombie     = gCV_PFovZombie.IntValue;
}

public void OnClientDisconnect(int client)
{
    if(SpawnTimer[client] != null)
    {
        KillTimer(SpawnTimer[client]);
        SpawnTimer[client] = null;
    }
}

public void ConVarChange(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    gB_PEnabled     = gCV_PEnabled.BoolValue;
    gI_PFovZombie     = gCV_PFovZombie.IntValue;
}

public void Event_PlayerSpawn(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
    
    if(SpawnTimer[client] != null)
    {
        KillTimer(SpawnTimer[client]);
        SpawnTimer[client] = null;
    }
    
    SpawnTimer[client] = CreateTimer(0.2, SpawnPlayer, client);
}

public Action SpawnPlayer(Handle timer, any client)
{
    if(gB_PEnabled && IsClientInGame(client) && IsPlayerAlive(client))
    {
        if(ZR_IsClientHuman(client))
        {
            SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
            SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
        }
        else
        {   
            SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
            SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
        }
    }
    SpawnTimer[client] = null;
}

public ZR_OnClientHumanPost(int client, bool respawn, bool protect)
{
    if(gB_PEnabled)
    {
        SetEntProp(client, Prop_Send, "m_iDefaultFOV", DEFAULT_FOV);
        SetEntProp(client, Prop_Send, "m_iFOV", DEFAULT_FOV);
    }
}

public ZR_OnClientInfected(client, attacker, bool:motherInfect, bool:respawnOverride, bool:respawn)
{
    if(gB_PEnabled)
    {   
        SetEntProp(client, Prop_Send, "m_iDefaultFOV", gI_PFovZombie);
        SetEntProp(client, Prop_Send, "m_iFOV", gI_PFovZombie);
    }
}
 

Вложения

  • zr_change_fov.smx
    5.3 КБ · Просмотры: 4
  • zr_change_fov.sp
    2.5 КБ · Просмотры: 8

Webman

Nevermind
Сообщения
803
Реакции
330
При тесте я заметил что если человек умирает, то ему ставится FOV другой (не знаю с чем связано). Если идет заражение или обратно то все нормально. Конечно можно попробовать через таймер сделать, но в тот когда писал плагин задумывался об этом.
--- Добавлено позже ---
Сделал через таймер и убрал OnGameFrame, теперь работает как надо.

Все равно не самое лучшее решение. Если у игрока меняется FOV во время смерти, то почему бы просто не делать какие-то проверки/действия через хук события player_death?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Seton1447, ну пробуй (синтаксис оставил старым, просто вырезал лишние функции)
 

Вложения

  • respawn.sp
    7 КБ · Просмотры: 11
  • respawn.smx
    9.3 КБ · Просмотры: 3

Mensi1337

Участник
Сообщения
242
Реакции
16
@Seton1447, ну пробуй (синтаксис оставил старым, просто вырезал лишние функции)
L 11/28/2017 - 17:02:51: [SM] Native "HookConVarChange" reported: Invalid convar handle 0 (error 4)
L 11/28/2017 - 17:02:51: [SM] Displaying call stack trace for plugin "respawn.smx":
L 11/28/2017 - 17:02:51: [SM] [0] Line 34, Z:\respawn.sp::OnPluginStart()
 

Mensi1337

Участник
Сообщения
242
Реакции
16
11/28/2017 - 23:44:27: [SM] Plugin encountered error 4: Invalid parameter or parameter type
L 11/28/2017 - 23:44:27: [SM] Native "ShowActivity2" reported: Language phrase "Toggled respawn on target" not found
L 11/28/2017 - 23:44:27: [SM] Displaying call stack trace for plugin "respawn_fx.smx":
L 11/28/2017 - 23:44:27: [SM] [0] Line 200, C:\WM-OS\wm-sm\respawn_fx.sp::MenuHandler_Players()

Работает, но ошибки и заметил что спеках тоже возрождает
 

Hollya

❤ GIRL SCRIPTER ❤
Сообщения
128
Реакции
32
Есть желающие адаптировать этот плагин: [CS: Source] - Poison Smoke
Для VIP, чтобы у игрок который имеет VIP статус, дым был ядовитый, т.е кто находится в дыму будет сниматься по N... количество хп.
 

Mensi1337

Участник
Сообщения
242
Реакции
16
Кто может в плагин adminmenu добавить когда пишешь !admin и админки нет у тебя, то появлялось окошко слева и писало
"У вас нет доступа к админке
За покупкой обращаться..."
?
Буду очень благодарен.
 

Вложения

  • adminmenu.sp
    7.3 КБ · Просмотры: 14

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Seton1447, в строке 168 сам пропишешь нужный текст вместо %адрес%
 

Вложения

  • adminmenu_mod.sp
    6 КБ · Просмотры: 32
Сверху Снизу