/_Parlament_\
Участник
- Сообщения
- 134
- Реакции
- 9
Добрый день, как сделать чтобы эффект сохранялся навсегда, и как сделать удаление
Добавлено через 15 часов 38 минут
ау
PHP:
#include <sourcemod>
#include <sdktools>
public Plugin:myinfo =
{
name = "Effects",
description = "Эффекты по карте",
author = "Parlament",
version = "1.0",
url = ""
};
public OnPluginStart()
{
RegConsoleCmd("effect", effect); //Создаем команду для игрока
}
public OnMapStart() //Прекэшим спрайты и свечения
{
}
public Action:effect(client, args) //Создаем меню
{
new Handle:class = CreatePanel();
SetPanelTitle(class, "*Effects* \n \n"); //Главное название меню
DrawPanelItem(class, "Spark"); //Пункт 1
DrawPanelItem(class, "Пункт 2"); //Пункт 2
DrawPanelItem(class, "Другое меню"); //Пункт 3 и тд
SetPanelCurrentKey(class, 9);
DrawPanelItem(class, "Закрыть меню");
SendPanelToClient(class, client, InfoMenuHandler, MENU_TIME_FOREVER);
CloseHandle(class);
}
public InfoMenuHandler(Handle:hMenu, MenuAction:action, client, iSlot)
{
if(iSlot == 1) //Проверяем игрока на какой пункт он нажал в данный момент 1 пункт
{
Spark(client); //1 пункт
}
}
stock Spark(client)
{
new Float:cpos[3], Float:apos[3];
new Float:dist, Float:epos[3];
wS_GetLookPos(client, epos);
GetClientEyeAngles(client, apos);
new String:MovelinearName[25];
GetClientEyePosition(client, cpos);
new ent_move = CreateEntityByName("func_movelinear"); //Создаем прямолинейное движение
Format(MovelinearName, 25, "mvlnr_%d", ent_move);
DispatchKeyValue(ent_move, "targetname", MovelinearName); //Даем ему имя, чтобы прнивязать к нему наш шар
DispatchKeyValueVector(ent_move, "origin", cpos); //Создаем в точке головы
DispatchKeyValueVector(ent_move, "movedir", apos); //И направляем его движение в сторону, куда мы смотрим
DispatchKeyValueFloat(ent_move, "BlockDamage", 0.0); //Не блочится
DispatchKeyValueFloat(ent_move, "StartPosition", 0.0);
DispatchKeyValueFloat(ent_move, "MoveDistance", dist); //Делаем дистанцию движения равную расстоянию между точек
SetEntPropFloat(ent_move, Prop_Data, "m_flSpeed", 500.0); // Задаем ему скорость (500 ед/сек)
DispatchKeyValue(ent_move, "spawnflags", "8"); //Применяем скорость
DispatchSpawn(ent_move); //Создаем движение
new ent_fire = CreateEntityByName("env_fire_trail"); //Вот тут уже создаем шар
DispatchKeyValueVector(ent_fire, "origin", cpos); //Создаем в точке головы
DispatchKeyValue(ent_fire, "solid", "0"); //Будет проходить через объектов
DispatchSpawn(ent_fire); //Спавним наш шар.
SetVariantString(MovelinearName); // Задаем привязку к другому объекту ("родителю"). В нашем случае объект прямолинейного движения
AcceptEntityInput(ent_fire, "SetParent"); //Применяем к нему родителя.
AcceptEntityInput(ent_move, "Start"); //Запускаем прямолинейное движение
AcceptEntityInput(ent_move, "Open"); //Задаем событие, когда шар дошел до нашей точки (прошел дистанцию)
}
public bool:wS_GetLookPos_Filter(ent, mask, any:client) //Проверка, что игрок не смотрит сам на себя.
{
return client != ent;
}
wS_GetLookPos(client, Float:wS_Pos[3]) // Получение позиции прицела
{
decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
GetClientEyePosition(client, EyePosition);
GetClientEyeAngles(client, EyeAngles);
h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, wS_GetLookPos_Filter, client);
TR_GetEndPosition(wS_Pos, h_trace);
CloseHandle(h_trace);
}
Добавлено через 15 часов 38 минут
ау
Последнее редактирование: