Nekro
Терра инкогнита
- Сообщения
- 4,025
- Реакции
- 2,260
Сфера света никак не хочет менять цвет с красного, в какие то миллисекунды вроде бывает меняет оттенок и иногда даже виден зелёный цвет, но в целом красный или около того, а должен быть рандомный цвет (строка 123). Может кто подскажет?
(в коде есть лишние проверки, но без них не работает как надо)
И на 156 строке пришлось добавить hTimerKill[client] = INVALID_HANDLE (разве с hTimerKill[client] = null не одно и тоже?), иначе сыпало
Решение: смена спрайта на sprites/glow.vmt
(в коде есть лишние проверки, но без них не работает как надо)
C-подобный:
#pragma semicolon 1
#pragma newdecls required
#include <vip_core>
#include <sdktools_functions>
#include <sdktools_entinput>
#include <sdktools_variant_t>
public Plugin myinfo =
{
name = "[ViP Core] Skin Color",
author = "Nek.'a 2x2 | ggwp.site ",
version = "1.0",
url = "https://ggwp.site/"
};
static const char g_sFeature[] = "skin_color";
bool
bEnable;
Handle
hTimer[MAXPLAYERS+1],
hTimerKill[MAXPLAYERS+1];
int
clr[MAXPLAYERS+1][4],
iEnt[MAXPLAYERS+1];
float
fTime;
public void OnPluginStart()
{
ConVar cvar;
cvar = CreateConVar("sm_skincolor_enable", "1", "Включить/выключить плагин", _, true, _, true, 1.0);
cvar.AddChangeHook(CVarChanged_Enable);
bEnable = cvar.BoolValue;
cvar = CreateConVar("sm_skincolor_time", "0.3", "Время (в секундах) обновления цветовой гаммы", _, true, 0.01, true, 70.0);
cvar.AddChangeHook(CVarChanged_Time);
fTime = cvar.FloatValue;
HookEvent("player_spawn", Event_PlayerSpawn);
AutoExecConfig(true, "skin_color", "vip");
if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();
}
public void CVarChanged_Enable(ConVar cvar, const char[] oldValue, const char[] newValue)
{
bEnable = cvar.BoolValue;
}
public void CVarChanged_Time(ConVar cvar, const char[] oldVal, const char[] newValue)
{
fTime = cvar.FloatValue;
}
public void OnPluginEnd()
{
if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
VIP_UnregisterFeature(g_sFeature);
}
public void OnClientDisconnect(int client)
{
if(hTimer[client]) delete hTimer[client];
}
public void VIP_OnVIPLoaded()
{
VIP_RegisterFeature(g_sFeature, BOOL);
}
public void OnMapStart()
{
PrecacheModel("sprites/redglow1.vmt");
}
public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
if(!bEnable)
return;
static int client;
if(!(client = GetClientOfUserId(GetEventInt(event, "userid"))) || !IsClientInGame(client)
|| !VIP_IsClientVIP(client) || !VIP_IsClientFeatureUse(client, g_sFeature))
return;
if(VIP_IsClientFeatureUse(client, g_sFeature))
{
if(hTimer[client]) delete hTimer[client];
hTimer[client] = CreateTimer(fTime, Color_Timer, GetClientUserId(client), TIMER_REPEAT);
if(VIP_IsClientFeatureUse(client, g_sFeature)) PrintToChat(client, "ViP Функция активна !");
if(!VIP_IsClientFeatureUse(client, g_sFeature)) PrintToChat(client, "ViP Функция отключена !");
PrintToChatAll("1111111111");
}
}
public Action Color_Timer(Handle timer, any client)
{
if(!(client = GetClientOfUserId(client)) || !IsPlayerAlive(client) || !hTimer[client] || !VIP_IsClientFeatureUse(client, g_sFeature))
return;
if(VIP_IsClientFeatureUse(client, g_sFeature))
{
clr[client][0] = GetRandomInt(1, 255);
clr[client][1] = GetRandomInt(1, 255);
clr[client][2] = GetRandomInt(1, 255);
SetEntityRenderMode(client, RENDER_TRANSCOLOR);
SetEntityRenderColor(client, clr[client][0], clr[client][1], clr[client][2]);
iEnt[client] = CreateEntityByName("env_glow");
if(iEnt[client] == -1)
return;
char sColor[32];
FormatEx(sColor, sizeof(sColor), "%i %i %i", GetRandomInt(1, 255), GetRandomInt(1, 255), GetRandomInt(1, 255));
DispatchKeyValue(iEnt[client], "model", "sprites/redglow1.vmt");
DispatchKeyValue(iEnt[client], "rendermode", "3");
DispatchKeyValue(iEnt[client], "scale", "1.0");
DispatchKeyValue(iEnt[client], "renderamt", "255");
DispatchKeyValue(iEnt[client], "rendercolor", sColor);
DispatchSpawn(iEnt[client]);
float fVec[3];
GetClientAbsOrigin(client, fVec);
//PrintToChatAll("Игрок [%N], с вектором [%.2f][%.2f][%.2f]", client, fVec[0], fVec[1], fVec[2]);
TeleportEntity(iEnt[client], fVec, NULL_VECTOR, NULL_VECTOR);
hTimerKill[client] = CreateTimer(fTime - 0.1, Timer_KillEnt, GetClientUserId(client));
//PrintToChatAll("Игрок [%N], Цвет сущности [%s]", client, sColor);
//PrintToChatAll("Создана сущность с индексом [%d] | Игрока [%N]", iEnt[client], client);
}
else
hTimerKill[client] = CreateTimer(fTime - 0.1, Timer_KillEnt, GetClientUserId(client));
}
public Action Timer_KillEnt(Handle timer, any userid)
{
Kill_Entity(GetClientOfUserId(userid));
}
stock void Kill_Entity(int client, const bool bTimer = false)
{
if(iEnt[client] && IsValidEntity(iEnt[client]))
{
AcceptEntityInput(iEnt[client], "Kill");
//PrintToChatAll("Сущность с индексом [%d] | Игрока [%N] уничтожена !", iEnt[client], client);
}
hTimerKill[client] = INVALID_HANDLE;
if(bTimer) hTimerKill[client] = null;
if(hTimerKill[client]) delete hTimerKill[client];
}
И на 156 строке пришлось добавить hTimerKill[client] = INVALID_HANDLE (разве с hTimerKill[client] = null не одно и тоже?), иначе сыпало
C-подобный:
L 05/04/2021 - 19:22:20: [SM] Plugin "vip/skins_color.smx" encountered error 23: Native detected error
L 05/04/2021 - 19:22:20: [SM] Invalid timer handle 1089019b (error 3) during timer end, displayed function is timer callback, not the stack trace
L 05/04/2021 - 19:22:20: [SM] Unable to call function "Timer_KillEnt" due to above error(s).
Вложения
Последнее редактирование: