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

[VIP] Paint 1.6f

Нет прав для скачивания

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
[VIP] Paint 1.0 - Позволяет вип игрокам рисовать на стенах.

Добавляет в VIP функции рисовалку. Тестил только на CSS, но вроде и на ксго должна только путь к материалам другой. Автор плагина

Пожалуйста войдите или зарегистрируйтесь чтобы видеть скрытый текст.

,

Пожалуйста войдите или зарегистрируйтесь чтобы видеть скрытый текст.

, я лишь сделал его как модуль.
Узнать больше об этом ресурсе...
 
Последнее редактирование:
Сообщения
420
Лучшие ответы
0
Реакции
21
Tried to look up command say as if it were a variable.

CSGO в консоли пишет и ничего не происходит!
 
Сообщения
420
Лучшие ответы
0
Реакции
21
Последнее редактирование:

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
работает, только надо либо рестарт, либо sm plugins reload vip/VIP_Core делать
Забыл указать в установке, если просто закинуть модуль во время работы сервера то нужно ядро вип перезапустить.
 

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
@Samoletik1337, надо сделать ограничения на длину рисовалки
Этого делать я пока что не научился, а так бы ограничение было бы кстати. Либо по времени 5-10 сек используешь и кулдаун 20-25 сек чтобы не было мусора на карте.
 

R1KO

всё тлен
Супермодератор
Сообщения
8,624
Лучшие ответы
1
Реакции
6,101
@Samoletik1337,
PHP:
public OnPluginStart() {
  
    RegConsoleCmd("+paint", CMD_laser_p);
    RegConsoleCmd("-paint", CMD_laser_m);
}
замени на
PHP:
public OnPluginStart()
{
  
    RegConsoleCmd("+paint", CMD_laser_p);
    RegConsoleCmd("-paint", CMD_laser_m);

    if(VIP_IsVIPLoaded())
    {
        VIP_OnVIPLoaded();
    }
}
И добавь блок:

PHP:
public OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
Это позволит загружать/выгружать модуль на ходу. Но нужна будет последняя версия ядра.

Далее.
PHP:
public Action:Timer_Pay(Handle:timer)
{
    new Float:pos[3];
    new Color = GetRandomInt(0,6);
    for(new Y = 1; Y <= MaxClients; Y++)
    {
        if(IsClientInGame(Y) && LaserE[Y])
        {
            TraceEye(Y, pos);
            if(GetVectorDistance(pos, LastLaser[Y]) > 6.0) {
                LaserP(LastLaser[Y], pos, g_DefaultColors_c[Color]);
                LastLaser[Y][0] = pos[0];
                LastLaser[Y][1] = pos[1];
                LastLaser[Y][2] = pos[2];
            }
        }
    }
}
Мне кажется лучше сделать так:
PHP:
public Action:Timer_Pay(Handle:timer)
{
    static Float:pos[3], iColor, i;    // Переменные создаем static (в уроках написано что это)
    for(i = 1; i <= MaxClients; ++i)
    {
        if(LaserE[i] && IsClientInGame(i))    // к переменной плагина доступ быстрее чем к внешней ф-и, сначала проще отсеять игроков без доступа, а потом уже проверять их валидность
        {
            TraceEye(i, pos);
            if(GetVectorDistance(pos, LastLaser[i]) > 6.0)
            {
                LaserP(LastLaser[i], pos, g_DefaultColors_c[GetRandomInt(0,6)]);    // Рандом делаем здесь, чтобы у каждого игрока был случайный цвет, а не один для всех
                LastLaser[i][0] = pos[0];
                LastLaser[i][1] = pos[1];
                LastLaser[i][2] = pos[2];
            }
        }
    }
}
Зачем это в отдельной ф-и ? Используется всего в 1 месте, к тому же плагин не настолько большой чтобы делить на отдельные функции.
На вызов ф-и и возврат из неё так же тратится время.
PHP:
stock LaserP(Float:start[3], Float:end[3], color[4]) {
    TE_SetupBeamPoints(start, end, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, color, 0);
    TE_SendToAll();
}

{false, ...} Можно не писать т.к. bool переменные по умолчанию инициализируются значением false
PHP:
new bool:LaserE[MAXPLAYERS+1] = {false, ...};
 
Последнее редактирование:

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
@Samoletik1337,
PHP:
public OnPluginStart() {
 
    RegConsoleCmd("+paint", CMD_laser_p);
    RegConsoleCmd("-paint", CMD_laser_m);
}
замени на
PHP:
public OnPluginStart()
{
 
    RegConsoleCmd("+paint", CMD_laser_p);
    RegConsoleCmd("-paint", CMD_laser_m);

    if(VIP_IsVIPLoaded())
    {
        VIP_OnVIPLoaded();
    }
}
И добавь блок:

PHP:
public OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
Это позволит загружать/выгружать модуль на ходу. Но нужна будет последняя версия ядра.

Далее.
PHP:
public Action:Timer_Pay(Handle:timer)
{
    new Float:pos[3];
    new Color = GetRandomInt(0,6);
    for(new Y = 1; Y <= MaxClients; Y++)
    {
        if(IsClientInGame(Y) && LaserE[Y])
        {
            TraceEye(Y, pos);
            if(GetVectorDistance(pos, LastLaser[Y]) > 6.0) {
                LaserP(LastLaser[Y], pos, g_DefaultColors_c[Color]);
                LastLaser[Y][0] = pos[0];
                LastLaser[Y][1] = pos[1];
                LastLaser[Y][2] = pos[2];
            }
        }
    }
}
Мне кажется лучше сделать так:
PHP:
public Action:Timer_Pay(Handle:timer)
{
    static Float:pos[3], iColor, i;    // Переменные создаем static (в уроках написано что это)
    for(i = 1; i <= MaxClients; ++i)
    {
        if(LaserE[i] && IsClientInGame(i))    // к переменной плагина доступ быстрее чем к внешней ф-и, сначала проще отсеять игроков без доступа, а потом уже проверять их валидность
        {
            TraceEye(i, pos);
            if(GetVectorDistance(pos, LastLaser[i]) > 6.0)
            {
                LaserP(LastLaser[i], pos, g_DefaultColors_c[GetRandomInt(0,6)]);    // Рандом делаем здесь, чтобы у каждого игрока был случайный цвет, а не один для всех
                LastLaser[i][0] = pos[0];
                LastLaser[i][1] = pos[1];
                LastLaser[i][2] = pos[2];
            }
        }
    }
}
Зачем это в отдельной ф-и ? Используется всего в 1 месте, к тому же плагин не настолько большой чтобы делить на отдельные функции.
На вызов ф-и и возврат из неё так же тратится время.
PHP:
stock LaserP(Float:start[3], Float:end[3], color[4]) {
    TE_SetupBeamPoints(start, end, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, color, 0);
    TE_SendToAll();
}

{false, ...} Можно не писать т.к. bool переменные по умолчанию инициализируются значением false
PHP:
new bool:LaserE[MAXPLAYERS+1] = {false, ...};
Вот так?
PHP:
#include <sourcemod>
#include <sdktools>
#include <vip_core>

#define VERSION "1.0.0"

public Plugin:myinfo =
{
    name = "[VIP] Paint",
    author = "Unknown",
    description = "paint",
    version = VERSION,
    url = ""
}

new const g_DefaultColors_c[7][4] = { {255,255,255,255}, {255,0,0,255}, {0,255,0,255}, {0,0,255,255}, {255,255,0,255}, {0,255,255,255}, {255,0,255,255} };
new Float:LastLaser[MAXPLAYERS+1][3];
new bool:LaserE[MAXPLAYERS+1];
new g_sprite;

public OnPluginStart()
{
 
    RegConsoleCmd("+paint", CMD_laser_p);
    RegConsoleCmd("-paint", CMD_laser_m);

    if(VIP_IsVIPLoaded())
    {
        VIP_OnVIPLoaded();
    }
}

static const String:g_sFeature[] = "paint";

public VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_sFeature, BOOL);
}

public OnMapStart() {
    g_sprite = PrecacheModel("materials/sprites/laserbeam.vmt");
    CreateTimer(0.1, Timer_Pay, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public OnClientPutInServer(client)
{
    LaserE[client] = false;
    LastLaser[client][0] = 0.0;
    LastLaser[client][1] = 0.0;
    LastLaser[client][2] = 0.0;
}

public Action:Timer_Pay(Handle:timer)
{
    static Float:pos[3], iColor, i;    // Переменные создаем static (в уроках написано что это)
    for(i = 1; i <= MaxClients; ++i)
    {
        if(LaserE[i] && IsClientInGame(i))    // к переменной плагина доступ быстрее чем к внешней ф-и, сначала проще отсеять игроков без доступа, а потом уже проверять их валидность
        {
            TraceEye(i, pos);
            if(GetVectorDistance(pos, LastLaser[i]) > 6.0)
            {
                LaserP(LastLaser[i], pos, g_DefaultColors_c[GetRandomInt(0,6)]);    // Рандом делаем здесь, чтобы у каждого игрока был случайный цвет, а не один для всех
                LastLaser[i][0] = pos[0];
                LastLaser[i][1] = pos[1];
                LastLaser[i][2] = pos[2];
            }
        }
    }
}

public Action:CMD_laser_p(iClient, args) {
    if(VIP_IsClientVIP(iClient) && VIP_IsClientFeatureUse(iClient, g_sFeature))
    {
    TraceEye(iClient, LastLaser[iClient]); LaserE[iClient] = true;
    }
    return Plugin_Handled;
}

public Action:CMD_laser_m(client, args) {
    LastLaser[client][0] = 0.0;
    LastLaser[client][1] = 0.0;
    LastLaser[client][2] = 0.0;
    LaserE[client] = false;
    return Plugin_Handled;
}

stock LaserP(Float:start[3], Float:end[3], color[4]) {
    TE_SetupBeamPoints(start, end, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, color, 0);
    TE_SendToAll();
}

TraceEye(client, Float:pos[3]) {
    decl Float:vAngles[3], Float:vOrigin[3];
    GetClientEyePosition(client, vOrigin);
    GetClientEyeAngles(client, vAngles);
    TR_TraceRayFilter(vOrigin, vAngles, MASK_SHOT, RayType_Infinite, TraceEntityFilterPlayer);
    if(TR_DidHit(INVALID_HANDLE)) TR_GetEndPosition(pos, INVALID_HANDLE);
    return;
}

public bool:TraceEntityFilterPlayer(entity, contentsMask) {
    return (entity > GetMaxClients() || !entity);
}

public OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
При компиляции, есть предупреждение.
 

Вложения

R1KO

всё тлен
Супермодератор
Сообщения
8,624
Лучшие ответы
1
Реакции
6,101
@Samoletik1337, iColor вообще удали в той строке.
И вместо вызова LaserP(LastLaser, pos, g_DefaultColors_c[GetRandomInt(0,6)]);
вставь туда содержимое этой ф-и
 

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
@Samoletik1337, iColor вообще удали в той строке.
И вместо вызова LaserP(LastLaser, pos, g_DefaultColors_c[GetRandomInt(0,6)]);
вставь туда содержимое этой ф-и
Можешь дураку мне поподробней рассказать какую ф-у туда вставить.
iColor вообще удали в той строке. - понял
И вместо вызова LaserP(LastLaser, pos, g_DefaultColors_c[GetRandomInt(0,6)]); - понял
вставь туда содержимое этой ф-и - не понял
Просто только недавно начал изучать SourcePawn
 

R1KO

всё тлен
Супермодератор
Сообщения
8,624
Лучшие ответы
1
Реакции
6,101
PHP:
if(GetVectorDistance(pos, LastLaser[i]) > 6.0)
 {
TE_SetupBeamPoints(LastLaser[i], pos, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, g_DefaultColors_c[GetRandomInt(0,6)], 0);
 TE_SendToAll();
LastLaser[i][0] = pos[0];
 LastLaser[i][1] = pos[1];
 LastLaser[i][2] = pos[2];
 }
а это
stock LaserP(Float:start[3], Float:end[3], color[4]) {
TE_SetupBeamPoints(start, end, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, color, 0);
TE_SendToAll();
}
вообще удали
 

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
PHP:
if(GetVectorDistance(pos, LastLaser[i]) > 6.0)
{
TE_SetupBeamPoints(LastLaser[i], pos, g_sprite, 0, 0, 0, 25.0, 2.0, 2.0, 10, 0.0, g_DefaultColors_c[GetRandomInt(0,6)], 0);
TE_SendToAll();
LastLaser[i][0] = pos[0];
LastLaser[i][1] = pos[1];
LastLaser[i][2] = pos[2];
}
а это

вообще удали
Спасибо, все хорошо скомпилилось без ошибок.
 

Boeing 676

Where I am ?
Сообщения
479
Лучшие ответы
0
Реакции
590
Сообщения
61
Лучшие ответы
0
Реакции
6
Можете сделать чтоб команду можно было использовать только когда живой, а то когда за игроком наблюдаешь можно его прицелом рисовать, игроки балуются.
 
Сообщения
5
Лучшие ответы
0
Реакции
1
У меня почему-то вообще не появляется плагин в вип меню. Вип кор последний
 
Сверху