Удалить трейл игрока после смерти

  • Автор темы Yaroslav
  • Дата начала
Y

Yaroslav

1. Как удалить Entity env_spritetrail после смерти игрока?

Получил ответ от wS на его форуме:
Просто сделай родителем env_spritetrail'а нож игрока и не парься.

Но понятия не имею как это сделать.

Код:
PHP:
trail[client] = CreateEntityByName("env_spritetrail", -1); 
       
new Float:Pos[3];    
GetClientAbsOrigin(client, Pos);    
Pos[2] += 55.0;    
decl String:xName[MAXPLAYERS+1]; 
IntToString(client, xName[client], 10);    
DispatchKeyValue(client, "targetname", xName[client]); 
       
DispatchKeyValueVector(trail[client], "origin", Pos);    
decl String:Name[MAXPLAYERS+1];    
GetClientName(client, Name[client], 64);    
DispatchKeyValue(trail[client], "parentname", Name[client]);    
DispatchKeyValue(trail[client], "spritename", "sprites/laser.vmt");    
DispatchKeyValue(trail[client], "rendermode", "5"); 

// option - выбор из меню    
if(option == 0) DispatchKeyValue(trail[client], "rendercolor", "0 255 0"); // Зеленый 
else if(option == 1) DispatchKeyValue(trail[client], "rendercolor", "255 0 0"); // Красный 
else if(option == 2) DispatchKeyValue(trail[client], "rendercolor", "0 0 255"); // Синий 
       
DispatchKeyValue(trail[client], "renderamt", "255");    
DispatchKeyValueFloat(trail[client], "lifetime", 4.0);    
DispatchKeyValueFloat(trail[client], "startwidth", 3.0);    
DispatchKeyValueFloat(trail[client], "endwidth", 7.0);    
DispatchSpawn(trail[client]);    
SetVariantString(xName[client]);    
AcceptEntityInput(trail[client], "SetParent");    
AcceptEntityInput(trail[client], "ShowSprite");

2. Как задать не простой цветной трейл, а другой, необычный.
Скачал трейл, установил на сервер, закачал в папку с css (лень было создавать загрузку файла с сервера).
Трейл загружал в папку materials/sprites

Делал так:
DispatchKeyValue(trail[client], "spritename", "sprites/youtube.vmt");
P.s. все 3 rendercolor убирал.
 

neatek

Участник
Сообщения
424
Реакции
225
Из моего магазина:
PHP:
// событие чебурек умирает
public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
	new nkx = GetClientOfUserId(GetEventInt(event,"userid"));

	if(0 < nkx <= MaxClients && IsClientInGame(nkx)) // is valid client
	{
		Void_KillTrail(nkx); // kill trail
	}
}

// Удаление трейла
void:Void_KillTrail(client)
{
    if(g_iEntity[client] > 0 && IsValidEdict(g_iEntity[client]))
    {
        AcceptEntityInput(g_iEntity[client], "ClearParent");
        AcceptEntityInput(g_iEntity[client], "Kill");
    }
        
    g_iEntity[client] = -1;
}

Удаление трейла...

А насчет #2 думай сам :)
У тебя это почти получилось, покопайся побольше в параметрах...
 
Y

Yaroslav

А насчет #2 думай сам :)
У тебя это почти получилось, покопайся побольше в параметрах...

Окей, попробую. Спасибо за помощь.

Добавлено через 10 минут
------
Удалить трейл после смерти получилось.
---------------------
Ссылку на документацию с параметрами Entity можешь скинуть?
 
Последнее редактирование модератором:

wanted241

Real-Gamer.Ru
Сообщения
428
Реакции
161
Из моего магазина:
PHP:
// событие чебурек умирает
public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
	new nkx = GetClientOfUserId(GetEventInt(event,"userid"));

	if(0 < nkx <= MaxClients && IsClientInGame(nkx)) // is valid client
	{
		Void_KillTrail(nkx); // kill trail
	}
}

// Удаление трейла
void:Void_KillTrail(client)
{
    if(g_iEntity[client] > 0 && IsValidEdict(g_iEntity[client]))
    {
        AcceptEntityInput(g_iEntity[client], "ClearParent");
        AcceptEntityInput(g_iEntity[client], "Kill");
    }
        
    g_iEntity[client] = -1;
}

Удаление трейла...

А насчет #2 думай сам :)
У тебя это почти получилось, покопайся побольше в параметрах...

Хах....... Где то я уже видел этот код =)

Добавлено через 1 минуту
Кстати, можно в разы легче сделать трейл. Главное иметь мозги.
 
Последнее редактирование:

neatek

Участник
Сообщения
424
Реакции
225
Хах....... Где то я уже видел этот код =)
Где?

PHP:
	g_iEntity[client] = CreateEntityByName("env_spritetrail");
	GetClientName(client, g_sName, sizeof(g_sName));
	DispatchKeyValue(g_iEntity[client], "parentname", g_sName);
	DispatchKeyValue(g_iEntity[client], "spritename", "sprites/trails/arrows.vmt");
	DispatchKeyValue(g_iEntity[client], "renderamt", "255");
	DispatchKeyValue(g_iEntity[client], "rendercolor", "255 255 255");
	DispatchKeyValue(g_iEntity[client], "rendermode", "5");
	DispatchSpawn(g_iEntity[client]);
Вот упрощенное создание трейла...
но тут не хватает одного звена для полной работы текстурки.
 
Y

Yaroslav

user_1: Не могу создать трейл, помогите, вот мои наброски: <код>;
user_2: Вот, держи: <измененный код>, ты не указал то-то, и тут у тебя неправильно. Документация по трейлам: <url> ;

-------------------------

user_1: не получается создать трейл из vmt файла, помогите, вот мои наброски: <код>;
user_2: ты почти все сделал правильно, молодец
user_3: user_1, твой код дер#мо, можно было сделать намного проще
user_2: user_3, этот код все равно лучше, потому что я его тоже использую. Вот смотри: <неполный код>
 

_wS_

Участник
Сообщения
383
Реакции
760
Из моего магазина:
PHP:
// событие чебурек умирает
public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
	new nkx = GetClientOfUserId(GetEventInt(event,"userid"));

	if(0 < nkx <= MaxClients && IsClientInGame(nkx)) // is valid client
	{
		Void_KillTrail(nkx); // kill trail
	}
}

Не проще ли просто:

PHP:
public player_death(Handle:event, const String:name[], bool:silent)
{
    Void_KillTrail(GetClientOfUserId(GetEventInt(event,"userid")));
}

Или бывают случаи когда игрок умирает не находясь на сервере?
Ну и это не лучшая идея:

PHP:
GetClientName(client, g_sName, sizeof(g_sName));
DispatchKeyValue(g_iEntity[client], "parentname", g_sName);
В имени игрока инопланетные символы могут быть и кто знает что из-за этого может быть.
 
Сверху Снизу