Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Как убрать спрайт трайла после смерти игрока?
Vor4uN Дата: Среда, 19.02.2014, 17:51:39 | Сообщение # 1
Сообщений: 49
Репутация: 3 [ +/- ]
Есть плагин выдает определнный трайл всем админам. Но после того как админ умер его трай выдается тому за кого он смотрит в спеках. Как убрать его?
Код
#include <sourcemod>
#include <sdktools>

new Handle:TrailSetTimer[MAXPLAYERS+1];
new trail[MAXPLAYERS+1];

public OnPluginStart()
{
     HookEvent("player_spawn", PlayerSpawn);
     AddFileToDownloadsTable("materials/sprites/trails/apple.vmt");
     AddFileToDownloadsTable("materials/sprites/trails/apple.vtf");
}
public OnMapStart()
{
     PrecacheModel("sprites/trails/wheel.vmt");
}
public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
     new client;
     client = GetClientOfUserId(GetEventInt(event, "userid"));
     TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client);
}
public player_death(Handle:event, const String:name[], bool:silent)
{
        Void_KillTrail(GetClientOfUserId(GetEventInt(event,"userid")));
}      
public Action:TrailSet(Handle:timer, any:client)
{
     if(client > 0 && IsClientInGame(client) && IsPlayerAlive(client) && (GetUserFlagBits(client) & ADMFLAG_ROOT))
     {
      new Float:Pos[3];
      GetClientAbsOrigin(client, Pos);
      Pos[2] += 65.0;
      trail[client] = CreateEntityByName("env_spritetrail");
      if (trail[client] < 1)
      {
       LogError("env_spritetrail create error!");
       return Plugin_Handled;
      }
      SetEntPropFloat(trail[client], Prop_Send, "m_flTextureRes", 0.05);
      DispatchKeyValueVector(trail[client], "origin", Pos);
      decl String:xName[10];
      IntToString(client, xName, 10);
      DispatchKeyValue(client, "targetname", xName);
      DispatchKeyValue(trail[client], "spritename", "sprites/trails/apple.vmt");
      DispatchKeyValue(trail[client], "rendermode", "5");
      DispatchKeyValue(trail[client], "rendercolor", "255 255 255");
      DispatchKeyValue(trail[client], "renderamt", "255");
      DispatchKeyValueFloat(trail[client], "lifetime", 5.0);
      DispatchKeyValueFloat(trail[client], "startwidth", 10.0);
      DispatchKeyValueFloat(trail[client], "endwidth", 5.0);
      DispatchSpawn(trail[client]);
      SetVariantString(xName);
      AcceptEntityInput(trail[client], "SetParent");
      AcceptEntityInput(trail[client], "ShowSprite");
     }
     TrailSetTimer[client] = INVALID_HANDLE;
     return Plugin_Handled;
}


Добавлено (19.02.2014, 17:51:39)
---------------------------------------------
Хотя бы примеры какие нибудь киньте, парни.
Я просто весь мозг сломал не могу ничего придумать. Если делаю
Код

AcceptEntityInput(trail[client], "ClearParent");
AcceptEntityInput(trail[client], "Kill");

То сервер крашится и все ни лога нету ничего.

Как нож сделать родителем спрайта?


Сообщение отредактировал Vor4uN - Среда, 19.02.2014, 17:53:30
 
sssw Дата: Среда, 19.02.2014, 21:12:02 | Сообщение # 2
Сообщений: 123
Репутация: 14 [ +/- ]
Побывал сделать не видимым может тебя это решение устроит?
Не могу сейчас тестировать код по этому не знаю как удалить трайл.

P.s попробуй RemoveEdict()


Сообщение отредактировал sssw - Среда, 19.02.2014, 21:12:52
 
Vor4uN Дата: Четверг, 20.02.2014, 09:43:17 | Сообщение # 3
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата sssw ()
Побывал сделать не видимым может тебя это решение устроит?
Не могу сейчас тестировать код по этому не знаю как удалить трайл.

P.s попробуй RemoveEdict()

Все перепробовал! Не получается у меня, не хватает знаний. Трайл появляется когда умер и смотришь за игрока и ни чего не могу сделать. Видел ктото писал про то что можно сделать родителем нож, но как сделать не описал, а примеров я не нашел((((
 
nailllain Дата: Четверг, 20.02.2014, 13:21:51 | Сообщение # 4
Сообщений: 14
Репутация: 2 [ +/- ]
Код
public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)  
{  
      new client;  
      client = GetClientOfUserId(GetEventInt(event, "userid"));  
      If (IsPlayerAlive(client))
{
      TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client);  
}
}
 
Vor4uN Дата: Четверг, 20.02.2014, 18:00:08 | Сообщение # 5
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата nailllain ()
public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client;
client = GetClientOfUserId(GetEventInt(event, "userid"));
If (IsPlayerAlive(client))
{
TrailSetTimer[client] = CreateTimer(0.1, TrailSet, client);
}
}


Вобще ни о чем ??? Может я что на так объяснил? Вобщим я пишу плагин себе трайлы за фраги у меня все получилось на основе данного выше кода, кроме как если игрок с трайлом умирает и попадает в спеки - то тот за кем он смотрит получает его трайл. Понимаешь теперь?? А твой код просто добавит условие при выдачи трайла при спавне игрока (проверка на не мертв ли он тут не нужна если он спавнится бро).
 
nailllain Дата: Четверг, 20.02.2014, 18:34:37 | Сообщение # 6
Сообщений: 14
Репутация: 2 [ +/- ]
Если несколько раз умереть, то у тебя трейлы получается должны друг на друга нализать. Это так?
 
Sallcom Дата: Четверг, 20.02.2014, 18:59:19 | Сообщение # 7
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата nailllain ()
проверка на не мертв ли он тут не нужна если он спавнится бро

А ничего, что когда ты в наблюдатели заходишь срабатывает PlayerSpawn?

И логичней будет делать не IsPlayerAlive(client) в player_spawn?


Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 14:48:26
 
Vor4uN Дата: Четверг, 20.02.2014, 19:53:01 | Сообщение # 8
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата Sallmap ()
IsPlayerAlive(client) а GetClientTeam(client) > 1

Зная это я и сделал так.

Код

public player_death(Handle:event, const String:name[], bool:silent)
{
     if(IsPlayerAlive(client) && IsClientInGame(client) && GetClientTeam(client) > 1)   
     {
        Void_KillTrail(GetClientOfUserId(GetEventInt(event,"userid")));
     }    
}

void:Void_KillTrail(client)
{
       if(trail[client] > 0 && IsValidEdict(trail[client]))
       {
           AcceptEntityInput(trail[client], "ClearParent");
           AcceptEntityInput(trail[client], "Kill");    
       }
              
       trail[client] = -1;
}          


Результат крашит сервер именно команда kill, остальное вообще не срабатывает. Если вставить вывод текстового сообщения после выполнения кода, то оно идет норм. Что не так сделал ???

Добавлено (20.02.2014, 19:53:01)
---------------------------------------------
Цитата nailllain ()
Если несколько раз умереть, то у тебя трейлы получается должны друг на друга нализать. Это так?

Было бы так если бы я именно этот код использовал, а я говорю что взял его за основу и сделал с базой , теперь все она регулирует забирает все при дисконекте, а (выдает все что взял клиент функцией) при спавне.
Говорю же все работает норм кроме вот этой дурацкой непонятной проблемы.


Сообщение отредактировал Vor4uN - Четверг, 20.02.2014, 19:54:06
 
Sallcom Дата: Четверг, 20.02.2014, 20:36:02 | Сообщение # 9
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата Vor4uN ()
Зная это я и сделал так.

Цитата
public player_death(Handle:event, const String:name[], bool:silent)
{
if(IsPlayerAlive(client) && IsClientInGame(client) && GetClientTeam(client) > 1)
......


Я же ясно написал, что условия нужны в PlayerSpawn.
А у тебя условие, когда игрок умирает проверяется живой ли он, если живой, то удалять трейл, но игрок то мертвый)))

Попробуй:
Код

public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)    
{    
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(IsPlayerAlive(client))
     CreateTimer(0.1, Timer_CreateTrail, client);    
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)      
{      
      new client = GetClientOfUserId(GetEventInt(event,"userid"));      
      decl String:classname[64];
      if(IsValidEntity(trail[client]))
      {
       GetEntPropString(trail[client], Prop_Data, "m_iClassname", classname, sizeof(classname));
       if(StrEqual(classname, "env_spritetrail"))
        AcceptEntityInput(trail[client], "Kill")
       else
        trail[client] = -1;      
      }
}     

public Action:Timer_CreateTrail(Handle:timer, any:client)    
{    
    if(IsClientInGame(client) && IsPlayerAlive(client) && (GetUserFlagBits(client) & ADMFLAG_ROOT))    
    {    
    //Тут создаешь трейл
    }
}


Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 12:14:42
 
Vor4uN Дата: Пятница, 21.02.2014, 00:10:37 | Сообщение # 10
Сообщений: 49
Репутация: 3 [ +/- ]
Нет не компилирует даже, все в ошибках теперь каждая строка ошибка.
Я думаю это не то. Получается ты пытаешься выдрать строку из кода выданного трайла и убить его командой kill.
Это не совсем верно получиться так как код найдет все env_spritetrail у всех игроков и уберет их. Это в теории а на практике не компилируется((( Лучше подскажите как сделать родителем ентити env_spritetrail не игрока а его нож? Тогда и проблема думаю сама собой отпадет, нож игрока пропадает с его смертью, а раз нет родителя нет и наследника.
 
sssw Дата: Пятница, 21.02.2014, 02:50:09 | Сообщение # 11
Сообщений: 123
Репутация: 14 [ +/- ]
Код
public KillEntityIn(i_Ent, Float:f_Seconds)
{
       if (IsValidEdict(i_Ent))
       {
           // Добавляем событие "kill" в очередь для удаления объекта
           decl String:s_AddOutput[64]
           FormatEx(s_AddOutput, sizeof(s_AddOutput), "OnUser1 !self:kill::%f:1", f_Seconds)
           SetVariantString(s_AddOutput)
           AcceptEntityInput(i_Ent, "AddOutput")
           AcceptEntityInput(i_Ent, "FireUser1")
       }
}
Пробуй.


Сообщение отредактировал sssw - Пятница, 21.02.2014, 02:51:07
 
Sallcom Дата: Пятница, 21.02.2014, 07:14:01 | Сообщение # 12
Сообщений: 205
Репутация: 31 [ +/- ]
Цитата sssw ()
Нет не компилирует даже, все в ошибках теперь каждая строка ошибка.
Я думаю это не то. Получается ты пытаешься выдрать строку из кода выданного трайла и убить его командой kill.
Это не совсем верно получиться так как код найдет все env_spritetrail у всех игроков и уберет их. Это в теории а на практике не компилируется((( Лучше подскажите как сделать родителем ентити env_spritetrail не игрока а его нож? Тогда и проблема думаю сама собой отпадет, нож игрока пропадает с его смертью, а раз нет родителя нет и наследника.

Ты вообще понимаешь смысл того, что написано в этом коде?

Цитата Sallmap ()
получиться так как код найдет все env_spritetrail у всех игроков и уберет их

Код
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)        
{        
        new client = GetClientOfUserId(GetEventInt(event,"userid"));        
        decl String:classname[64];    
        if(IsValidEntity(trail[client]))    
        {    
         GetEntPropString(trail[client], Prop_Data, "m_iClassname", classname, sizeof(classname));    
         if(StrEqual(classname, "env_spritetrail"))    
          AcceptEntityInput(trail[client], "Kill")    
         else    
          trail[client] = -1;        
        }    
}

Разве тут запущен цикл, который удаляет трейлы всех игроков?

P.S. Так сложно воспользоваться гуглом и перевести ошибки, которые вам выдает компилятор?
В основном это не подключенные инклюды или не объявленные переменные и вы сразу говорите: "Код даже не компилируется, одни ошибки", так что сначала научитесь понимать ошибки, а потом писать плагины.


Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 07:25:37
 
Vor4uN Дата: Пятница, 21.02.2014, 09:04:18 | Сообщение # 13
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата Sallmap ()
P.S. Так сложно воспользоваться гуглом и перевести ошибки, которые вам выдает компилятор?

Блин да как объяснить то тебе? Я же сразу написал что код не такой как тут а взят за основу и у меня теперь не так все устроено в плагине вот смотри код.

Код

public Event_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
             new client = GetClientOfUserId(GetEventInt(event, "userid")); проверя клиента на использование бонусов если есть то выполняю, код выдаю функцию таймером.
          "тут код проверки "   
   BonusSetTimer[client] = CreateTimer(0.1, BonusSet, client); этот таймер запускает установку всего что купил клиент в начале раунда, при дисконекте база обнуляет все бонусы.
}

public Event_Death(Handle:event, const String:name[], bool:dontBroadcast)
{
   new client = GetClientOfUserId(GetEventInt(event, "attacker"));
   if(client > 0 && GetClientTeam(client) != GetClientTeam(GetClientOfUserId(GetEventInt(event, "userid"))))
   points[client] += 50;
}

выдача трайла так же заменена вот таким кодом   
{
             new trail = CreateEntityByName("env_spritetrail", -1);
     if (trail < 1)
     {
      LogError("env_spritetrail create error!");
      return 0;
     }
     DispatchKeyValueVector(trail, "origin", Pos);
     decl String:xName[10];
     IntToString(client, xName, 10);
     DispatchKeyValue(client, "targetname", xName);
     DispatchKeyValue(trail, "spritename", "название картинки  трайла");
     DispatchKeyValue(trail, "rendermode", "5");
     DispatchKeyValue(trail, "rendercolor", "255 255 255");
     DispatchKeyValue(trail, "renderamt", "255");
     DispatchKeyValueFloat(trail, "lifetime", 10.0);
     DispatchKeyValueFloat(trail, "startwidth", 10.0);
     DispatchKeyValueFloat(trail, "endwidth", 5.0);
     DispatchSpawn(trail);
     SetVariantString(xName);
     AcceptEntityInput(trail, "SetParent");
     AcceptEntityInput(trail, "ShowSprite");
}



При установке твоего куска кода, возникает ошибка параметра класснейм и не правельно установленных значений клиент и трайл. Я конечно не так хорошо разбираюсь в коде как ты , но интуитивно понимаю что код не прокатит твой.


Сообщение отредактировал Vor4uN - Пятница, 21.02.2014, 16:13:21
 
Sallcom Дата: Пятница, 21.02.2014, 12:13:45 | Сообщение # 14
Сообщений: 205
Репутация: 31 [ +/- ]
Если ты не можешь различить переменные trail[client] и trail, то это твои проблемы.

Цитата Vor4uN ()
не так хорошо разбираюсь в коде как ты , но интуитивно понимаю что код не прокатит твой.

"интуитивно" - знаний 0, а уже думаешь, что понимаешь код, который пишешь))

P.S. Не думай, что я тебя пытаюсь унизить, просто нужно понимать то, что ты пишешь, а не делать copy-paste из другого плагина.


Сообщение отредактировал Sallmap - Пятница, 21.02.2014, 12:18:55
 
Vor4uN Дата: Пятница, 21.02.2014, 12:34:12 | Сообщение # 15
Сообщений: 49
Репутация: 3 [ +/- ]
Цитата Sallmap ()
Если ты не можешь различить переменные trail[client] и trail, то это твои проблемы.

Балван ты!!! Написал же что переменные все поменял сразу , че агришся? Не можешь помочь потому что не знаешь код и не умеешь писать его? Не понимаю таких людей. ты сам дал мне код из другого плагина который я уже видел до тебя и испробовал его. По поводу понятия того что пишешь, попробуй скомпиль то что ты тут нацарапал с исходный кодом и ты увидишь кто тут ботинок ссаный в кодинге.
PS Не хочу тебя обижать бро, просто надо понимать, что ты пишешь когда пытаешься показаться умнее других.

Добавлено (21.02.2014, 12:34:12)
---------------------------------------------
По поводу копи паста - укажи мне плагин с которого я якобы взял код. Если не сможешь жду публичных извенений за тухлый базар

 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: