GLOW Эффект, на определенной команде.

burden boy

Участник
Сообщения
98
Реакции
4
Здравствуйте! Имеется плагин, ZR: Glowing Human. Как можно сделать так, чтобы террористы отображались - с этим эффектом? То-есть, мне нужно вырезать ZR - сделать отображение на обычный паблик, я не прошу вас, сделать это за меня - дайте наставление, просто, я не очень хорошо понимаю SourceMod.
 

Вложения

  • zr_glow.sp
    3.5 КБ · Просмотры: 20

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
чтобы террористы отображались - с этим эффектом?

Удаляем все что связано с ZombieReloaded и то что не нужно во все(имхо):
PHP:
#include <zombiereloaded>

bool first;

PHP:
public void Event_RoundStart(Event event, char[] name, bool dontBroadcast)
{
   first = true;
}

PHP:
public ZR_OnClientInfected(int client,int attacker, bool motherInfect, bool respawnOverride, bool respawn)
{
   if(first)
   {
       // create glow models in first infection for prevent crash on round start (optimization)
       first = false;
       for( int i = 1; i <= MaxClients; i++ )
           if (IsClientInGame(i) && IsPlayerAlive(i) && ZR_IsClientHuman(i))SetupGlowSkin(i);
   }
 
   // zombies dont need to have a glow model
   UnhookGlow(client);
}

PHP:
public ZR_OnClientHumanPost(int client, bool respawn, bool protect)
{
   // remove and re create all glow models for prevent this bug https://forums.alliedmods.net/showthread.php?t=280484
   for( int i = 1; i <= MaxClients; i++ )
       if (IsClientInGame(i) && IsPlayerAlive(i) && ZR_IsClientHuman(i))
       {
           CPS_RemoveSkin(client);
           SetupGlowSkin(i);
       }
}


Заменить:

PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
   HookEvent("round_start", Event_RoundStart);
}
>>
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}

PHP:
//Who can see the glow if vaild
public Action OnSetTransmit_GlowSkin(int iSkin, int client)
{
/*   if(CPS_HasSkin(client) && EntRefToEntIndex(CPS_GetSkin(client)) == iSkin)
   {
       return Plugin_Handled;
   }*/
 
   if (!IsPlayerAlive(client))
       return Plugin_Handled;
 
 
 
   if (ZR_IsClientZombie(client))
       return Plugin_Continue;
 
 
   return Plugin_Handled;
}
>>
PHP:
//Who can see the glow if vaild
public Action OnSetTransmit_GlowSkin(int iSkin, int client)
{
/*   if(CPS_HasSkin(client) && EntRefToEntIndex(CPS_GetSkin(client)) == iSkin)
   {
       return Plugin_Handled;
   }*/
 
   if (!IsPlayerAlive(client))
       return Plugin_Handled;
 
   return Plugin_Handled;


Дальше опять мой не любимый таймер, что б его...
Добавь в код, после всех манипуляций выше. (Нужно ли удалять таймер?)
Кое кто опять в теме отчитает :biggrin:
PHP:
#define TimeStart 120.0       // Через 2 минуты будет включен glow effect CT
#define TimeEnd 10.0       // Через 10 секунд будет выключен glow effect CT

public void OnMapStart()
{
   CreateTimer(TimeStart, TimerGlowStart, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Первый таймер(создание)
}

public Action TimerGlowStart(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i) // Цикл игроков
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3) // Проверка есть ли игрок в игре, жив ли он и играет ли за кт?
       {
           SetupGlowSkin(i);   // Установили Glow effect
       }
   }
   CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
}

public Action TimerGlowEnd(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);   // Уничтожили glow effect
       }
   }
}

Сам код я не тестировал( не проверял на сервере, лень... ), но по идеи должно работать. Внесите поправки, если что не так :ab:
 
Последнее редактирование:

burden boy

Участник
Сообщения
98
Реакции
4
Удаляем все что связано с ZombieReloaded и то что не нужно во все(имхо):
PHP:
#include <zombiereloaded>

bool first;

PHP:
public void Event_RoundStart(Event event, char[] name, bool dontBroadcast)
{
   first = true;
}

PHP:
public ZR_OnClientInfected(int client,int attacker, bool motherInfect, bool respawnOverride, bool respawn)
{
   if(first)
   {
       // create glow models in first infection for prevent crash on round start (optimization)
       first = false;
       for( int i = 1; i <= MaxClients; i++ )
           if (IsClientInGame(i) && IsPlayerAlive(i) && ZR_IsClientHuman(i))SetupGlowSkin(i);
   }
 
   // zombies dont need to have a glow model
   UnhookGlow(client);
}

PHP:
public ZR_OnClientHumanPost(int client, bool respawn, bool protect)
{
   // remove and re create all glow models for prevent this bug https://forums.alliedmods.net/showthread.php?t=280484
   for( int i = 1; i <= MaxClients; i++ )
       if (IsClientInGame(i) && IsPlayerAlive(i) && ZR_IsClientHuman(i))
       {
           CPS_RemoveSkin(client);
           SetupGlowSkin(i);
       }
}


Заменить:

PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
   HookEvent("round_start", Event_RoundStart);
}
>>
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}

PHP:
//Who can see the glow if vaild
public Action OnSetTransmit_GlowSkin(int iSkin, int client)
{
/*   if(CPS_HasSkin(client) && EntRefToEntIndex(CPS_GetSkin(client)) == iSkin)
   {
       return Plugin_Handled;
   }*/
 
   if (!IsPlayerAlive(client))
       return Plugin_Handled;
 
 
 
   if (ZR_IsClientZombie(client))
       return Plugin_Continue;
   
 
   return Plugin_Handled;
}
>>
PHP:
//Who can see the glow if vaild
public Action OnSetTransmit_GlowSkin(int iSkin, int client)
{
/*   if(CPS_HasSkin(client) && EntRefToEntIndex(CPS_GetSkin(client)) == iSkin)
   {
       return Plugin_Handled;
   }*/
 
   if (!IsPlayerAlive(client))
       return Plugin_Handled;   
 
   return Plugin_Handled;


Дальше опять мой не любимый таймер, что б его...
Добавь в код, после всех манипуляций выше. (Нужно ли удалять таймер?)
Кое кто опять в теме отчитает :biggrin:
PHP:
#define TimeStart 120.0       // Через 2 минуты будет включен glow effect CT
#define TimeEnd 10.0       // Через 10 секунд будет выключен glow effect CT

public void OnMapStart()
{
   CreateTimer(TimeStart, TimerGlowStart, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Первый таймер(создание)
}

public Action TimerGlowStart(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i) // Цикл игроков
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3) // Проверка есть ли игрок в игре, жив ли он и играет ли за кт?
       {
           SetupGlowSkin(i);   // Установили Glow effect
           CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
       }
   }
}

public Action TimerGlowEnd(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);   // Уничтожили glow effect
       }
   }
}

Сам код я не тестировал( не проверял на сервере, лень... ), но по идеи должно работать. Внесите поправки, если что не так :ab:
Уф, огромное спасибо - что все расписали. Поправки - я думаю, не с могу внести, не опытный в этом деле :ab:
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Уф, огромное спасибо - что все расписали. Поправки - я думаю, не с могу внести, не опытный в этом деле :ab:
Че то я тупанул... Просто строку тогда скопировал, чтобы код снова не писать.

PHP:
CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
>>
PHP:
CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение) // TIMER_REPEAT - там не нужен(повтор)
 

burden boy

Участник
Сообщения
98
Реакции
4
Че то я тупанул... Просто строку тогда скопировал, чтобы код снова не писать.

PHP:
CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
>>
PHP:
CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение) // TIMER_REPEAT - там не нужен(повтор)
Чтобы не создавать новую тему, хотелось бы задать вопрос. Как можно, сделать для этой команды - бессмертие?
 

wayLANder

Где AlmazON?
Сообщения
1,742
Реакции
577
@Wayne1337, Оффтоп
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Для команды, у которой GLOW эффект, хотелось бы сделать бессмертие. Как это можно реализовать? :blush2:
Уже из получившегося кода, делай следующее...

Удалить:
PHP:
#define TimeStart 120.0       // Через 2 минуты будет включен glow effect CT
#define TimeEnd 10.0       // Через 10 секунд будет выключен glow effect CT

public void OnMapStart()
{
   CreateTimer(TimeStart, TimerGlowStart, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Первый таймер(создание)
}

public Action TimerGlowStart(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i) // Цикл игроков
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3) // Проверка есть ли игрок в игре, жив ли он и играет ли за кт?
       {
           SetupGlowSkin(i);   // Установили Glow effect
       }
   }
   CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
}

public Action TimerGlowEnd(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);   // Уничтожили glow effect
       }
   }
}
Заменить:
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}
>>
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
   HookEvent("round_start", RoundStart); // Регистрируем момент при загрузки плагина
   HookEvent("round_end", RoundEnd);
}
Добавить:
PHP:
public Action RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3)
       {
           SetupGlowSkin(i);
       }
   }
}

public Action RoundEnd(Handle event, const char[] name, bool dontBroadcast)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);
       }
   }
}

Если будет перебивать(исчезать эффект), то придется сделать иным способом.

При старте раунда всем ктшникам будет установлен этот glow effect.
После конца раунда он будет снят.
 
Последнее редактирование:

burden boy

Участник
Сообщения
98
Реакции
4
Уже из получившегося кода, делай следующее...

Удалить:
PHP:
#define TimeStart 120.0       // Через 2 минуты будет включен glow effect CT
#define TimeEnd 10.0       // Через 10 секунд будет выключен glow effect CT

public void OnMapStart()
{
   CreateTimer(TimeStart, TimerGlowStart, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); // Первый таймер(создание)
}

public Action TimerGlowStart(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i) // Цикл игроков
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3) // Проверка есть ли игрок в игре, жив ли он и играет ли за кт?
       {
           SetupGlowSkin(i);   // Установили Glow effect
           CreateTimer(TimeEnd, TimerGlowEnd, _, TIMER_FLAG_NO_MAPCHANGE); // Второй таймер (уничтожение)
       }
   }
}

public Action TimerGlowEnd(Handle timer)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);   // Уничтожили glow effect
       }
   }
}
Заменить:
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
}
>>
PHP:
public void OnPluginStart()
{
   CreateConVar("zr_glowing_version", DATA, "plugin info", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
   HookEvent("round_start", RoundStart); // Регистрируем момент при загрузки плагина
   HookEvent("round_end", RoundEnd);
}
Добавить:
PHP:
public Action RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3)
       {
           SetupGlowSkin(i);
       }
   }
}

public Action RoundEnd(Handle event, const char[] name, bool dontBroadcast)
{
   for(int i = 1; i <= MaxClients; ++i)
   {
       if(IsClientInGame(i))
       {
           UnhookGlow(i);
       }
   }
}

Если будет перебивать(исчезать эффект), то придется сделать иным способом.

При старте раунда всем ктшникам будет установлен этот glow effect.
После конца раунда он будет снят.
Спасибо :congratulate:
Проверил, все работает :ab:
 

AlexPa1

Участник
Сообщения
292
Реакции
54
А вот я не понимаю, можно готовый за спасибо?
 
Сверху Снизу