помогите доделать плагин

/_Parlament_\

Участник
Сообщения
134
Реакции
9
Добрый день, как сделать чтобы эффект сохранялся навсегда, и как сделать удаление
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 минут
ау
 
Последнее редактирование:
Сверху Снизу