Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Проблема такова, сделал ловушку, всё для неё прописал, далее, требуется добавить звук Именно на клиенте после срабатывания ловушки.
Ловушка работает по такому принципу: 1) Ловушку разместили. 2)Задели тригер, она сработала. 
Кусок кода
всё ли делаю правильно ?
 

class Tripwire_RGD5 extends TrapBase
{
	private EffectSound 	m_Sound		= NULL;
	private string		m_SoundSetType	= "Serdce_SoundSet";

override void OnSteppedOn(EntityAI victim)
{
 		if ( GetGame().IsClient() || !GetGame().IsMultiplayer())
		{
			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}
		}
}

	void PlaySoundHeart()
	{
		if ( GetGame().IsClient() || !GetGame().IsMultiplayer() )
		{
			m_Sound = SEffectManager.PlaySoundOnObject( m_SoundSetType, this, 0, 0, true);
			m_Sound.SetSoundAutodestroy( true );
		}
	}
}


 

Изменено пользователем DrZiLLo (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 1
1 минуту назад, DrZiLLo сказал:

или нужно указать в f ( victim ) вот эту часть ?

if ( GetGame().GetPlayer() ) { PlaySoundHeart(); }


			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}

 

разумеется нужно. Точнее вообще это надо переделывать. У тебя щас

if ( GetGame().IsClient() || !GetGame().IsMultiplayer())
		{
			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}
		}

выполняется вне проверок if ( !GetDisarmed() ) и if ( victim )

Проще говоря, ты не проверяешь как я понимаю наличие активировалась ли ловушка и т.п.
Тем не менее через if ( GetGame().IsServer()) ты отрубаешь эти проверки для клиента

Т.е. у тебя звук в любом случае проигрывается когда выполняется OnSteppedOn именно на клиенте

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 0

вроде бы да

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
21 минуту назад, 123new сказал:

вроде бы да

Его точно не будет слышно в окружении ( другие игроки ) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 часа назад, DrZiLLo сказал:

Его точно не будет слышно в окружении ( другие игроки ) ?

не должно, так как звук чисто на клиентской стороне воспроизводится у тебя, у кого эта функция будет вызвана. А вот условия ее вызова вы сами уже по коду пишете

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, 123new сказал:

не должно, так как звук чисто на клиентской стороне воспроизводится у тебя, у кого эта функция будет вызвана. А вот условия ее вызова вы сами уже по коду пишете

Ну смотри, вот например, правильно в условия вставил ? (условие=когда человек встал на ловушку)

	override void OnSteppedOn(EntityAI victim)
	{
		if ( GetGame().IsServer())
		{
			if ( !GetDisarmed() )
			{
				if ( victim )
				{
					//Check if we have a player
					PlayerBase victim_PB = PlayerBase.Cast( victim );
					if ( victim_PB && victim_PB.IsAlive() )
					{
						int randNum; //value used for probability evaluation
						randNum = Math.RandomInt(0, 100);
						if ( randNum <= BROKEN_LEG_PROB )
						{
							float damage = victim_PB.GetMaxHealth( "RightLeg", "" ); //deal 100% damage to break legs
							victim_PB.DamageAllLegs( damage ); 
						}
						
						randNum = Math.RandomInt(0, 100);
						if ( randNum < BLEED_SOURCE_PROB )
						{
							for ( int i = 0; i < MAX_BLEED_SOURCE; i++ )
							{
								//We add two bleeding sources max to lower half
								randNum = Math.RandomIntInclusive(0, PlayerBase.m_BleedingSourcesLow.Count() - 1);
						
								victim_PB.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(PlayerBase.m_BleedingSourcesLow[randNum]);
							}
						}
						
						DamageClothing( victim_PB );
					}
				}
				Explode( DT_EXPLOSION );
			}
			m_DeleteTimer = new Timer( CALL_CATEGORY_SYSTEM );
			m_DeleteTimer.Run( 1, this, "DeleteThis" );
		}
		
		if ( GetGame().IsClient() || !GetGame().IsMultiplayer())
		{
			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}
		}
		
		SetState(TRIGGERED);
	}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
7 минут назад, 123new сказал:

не должно, так как звук чисто на клиентской стороне воспроизводится у тебя, у кого эта функция будет вызвана. А вот условия ее вызова вы сами уже по коду пишете

или нужно указать в f ( victim ) вот эту часть ?

			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
	override void OnSteppedOn(EntityAI victim)
	{
		bool IsServer = false;
		bool IsDisarmed = false;
		
		if ( GetGame().IsServer())
		{
			IsServer = true;
		}
		IsDisarmed = GetDisarmed();
		
		if(victim)
		{
			PlayerBase victim_PB = PlayerBase.Cast( victim );
			if ( victim_PB && victim_PB.IsAlive() )
			{
				if (IsServer)
				{
					if ( !IsDisarmed )
					{
						int randNum; //value used for probability evaluation
						randNum = Math.RandomInt(0, 100);
						if ( randNum <= BROKEN_LEG_PROB )
						{
							float damage = victim_PB.GetMaxHealth( "RightLeg", "" ); //deal 100% damage to break legs
							victim_PB.DamageAllLegs( damage ); 
						}						
						randNum = Math.RandomInt(0, 100);
						if ( randNum < BLEED_SOURCE_PROB )
						{
							for ( int i = 0; i < MAX_BLEED_SOURCE; i++ )
							{
								//We add two bleeding sources max to lower half
								randNum = Math.RandomIntInclusive(0, PlayerBase.m_BleedingSourcesLow.Count() - 1);
						
								victim_PB.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(PlayerBase.m_BleedingSourcesLow[randNum]);
							}
						}						
						DamageClothing( victim_PB );							
						Explode( DT_EXPLOSION );
					}
					m_DeleteTimer = new Timer( CALL_CATEGORY_SYSTEM );
					m_DeleteTimer.Run( 1, this, "DeleteThis" );
				}
				
				if ( GetGame().IsClient() || !GetGame().IsMultiplayer())
				{
					if ( GetGame().GetPlayer() )
					{
						if ( !IsDisarmed )
						{
							PlaySoundHeart();
						}
					}
				}
				
				SetState(TRIGGERED);
			}
		}
	}

в теории лучше так наверно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
09.07.2021 в 12:47, 123new сказал:

разумеется нужно. Точнее вообще это надо переделывать. У тебя щас

if ( GetGame().IsClient() || !GetGame().IsMultiplayer()) { if ( GetGame().GetPlayer() ) { PlaySoundHeart(); } }


if ( GetGame().IsClient() || !GetGame().IsMultiplayer())
		{
			if ( GetGame().GetPlayer() )
			{
				PlaySoundHeart();
			}
		}

выполняется вне проверок if ( !GetDisarmed() ) и if ( victim )

Проще говоря, ты не проверяешь как я понимаю наличие активировалась ли ловушка и т.п.
Тем не менее через if ( GetGame().IsServer()) ты отрубаешь эти проверки для клиента

Т.е. у тебя звук в любом случае проигрывается когда выполняется OnSteppedOn именно на клиенте

Как оказалось звук слышит и другой игрок который рядом, уменьшил просто дальность его действия, может быть поможете чтобы было слышно именно у игрока, который наступил на ловушку ?(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.