Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
Larryoncheg

Запрет на нахождение игроков за картой

Подскажите, как скриптово, или может есть мод, который запрещает находиться игрокам за пределами карты? 

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Ну можешь например как-то так (проверку на админку уже сам допишешь)

modded class PlayerBase
{
	private const float	CHECK_INTERVAL = 2; // Интервал проверки положения игрока в секундах
	private vector lastPos;
	private float checkCounter;
	
	void OnScheduledTick(float deltaTime)
	{
		super.OnScheduledTick(deltaTime);
		
		if( !IsPlayerSelected() || !IsAlive() ) return;
		
		if (checkCounter >= CHECK_INTERVAL)
		{
			checkCounter = 0;
			
			int liquidType;
			string surfaceType;
			
			GetGame().SurfaceUnderObject(this, surfaceType, liquidType);
			if (surfaceType == "" && liquidType == -1)
			{
				SetPosition(lastPos);
			}
			else
			{
				lastPos = GetPosition();
			}
		}
		else
		{
			checkCounter = checkCounter + deltaTime;
		}
	
	}
	
	override void AfterStoreLoad()
	{
		super.AfterStoreLoad();
		lastPos = GetPosition();
	}
}

 

Edited by nytlenc (see edit history)

Share this post


Link to post
Share on other sites



  • 0

Поддерживаю код выше, добавлю вопрос - что значит "за пределами карты"?

Share this post


Link to post
Share on other sites
  • 0
5 часов назад, XenoZD сказал:

Поддерживаю код выше, добавлю вопрос - что значит "за пределами карты"?

Думаю человек как раз и имел в виду то что описано кодом выше, чтобы игрок не мог покинуть предел карты, тоесть не мог выйти за границы по краям карты где заканчивается травка  ))))

Share this post


Link to post
Share on other sites
  • 0
2 часа назад, nytlenc сказал:

Думаю человек как раз и имел в виду то что описано кодом выше, чтобы игрок не мог покинуть предел карты, тоесть не мог выйти за границы по краям карты где заканчивается травка  ))))

Просто возьми хоть (0 0 0) к примеру, травки там нет, а вот вода есть. Код увидит воду под игроком и всё будет ок

Share this post


Link to post
Share on other sites
  • 0
05.01.2023 в 20:10, nytlenc сказал:

Ну можешь например как-то так (проверку на админку уже сам допишешь)

modded class PlayerBase { private const float CHECK_INTERVAL = 2; // Интервал проверки положения игрока в секундах private vector lastPos; private float checkCounter; void OnScheduledTick(float deltaTime) { super.OnScheduledTick(deltaTime); if( !IsPlayerSelected() || !IsAlive() ) return; if (checkCounter >= CHECK_INTERVAL) { checkCounter = 0; int liquidType; string surfaceType; GetGame().SurfaceUnderObject(this, surfaceType, liquidType); if (surfaceType == "" && liquidType == -1) { SetPosition(lastPos); } else { lastPos = GetPosition(); } } else { checkCounter = checkCounter + deltaTime; } } override void AfterStoreLoad() { super.AfterStoreLoad(); lastPos = GetPosition(); } }


modded class PlayerBase
{
	private const float	CHECK_INTERVAL = 2; // Интервал проверки положения игрока в секундах
	private vector lastPos;
	private float checkCounter;
	
	void OnScheduledTick(float deltaTime)
	{
		super.OnScheduledTick(deltaTime);
		
		if( !IsPlayerSelected() || !IsAlive() ) return;
		
		if (checkCounter >= CHECK_INTERVAL)
		{
			checkCounter = 0;
			
			int liquidType;
			string surfaceType;
			
			GetGame().SurfaceUnderObject(this, surfaceType, liquidType);
			if (surfaceType == "" && liquidType == -1)
			{
				SetPosition(lastPos);
			}
			else
			{
				lastPos = GetPosition();
			}
		}
		else
		{
			checkCounter = checkCounter + deltaTime;
		}
	
	}
	
	override void AfterStoreLoad()
	{
		super.AfterStoreLoad();
		lastPos = GetPosition();
	}
}

 

Работает, спасибо!

Share this post


Link to post
Share on other sites
  • 0
06.01.2023 в 15:45, XenoZD сказал:

Просто возьми хоть (0 0 0) к примеру, травки там нет, а вот вода есть. Код увидит воду под игроком и всё будет ок

Сомневаюсь что игрок сам доплывает до 0 0 0. Или по крайней мере станет пытаться это делать.

Share this post


Link to post
Share on other sites
  • 0

Что я мог сделать не так?

1. Создал файл c этим кодом. Назвал ExitMap.c

2. Через Тулз собрал его в pbo, закинул в папку с серверными модами.

Не работает....

 

Так же видел на каком-то проекте, когда машина приближается к краю карты - она глохнет и надо руками выталкивать её обратно в зону, чтобы завести.

Это мод какой-то есть?

Share this post


Link to post
Share on other sites
  • 0

Разобрался. Получилось. Спасибо.

Осталось разобраться, как прописать игнорировать админа:)

P.S> Да, да, только учусь еще))

 

Share this post


Link to post
Share on other sites
  • 0
05.01.2023 в 19:10, nytlenc сказал:

Ну можешь например как-то так (проверку на админку уже сам допишешь)

modded class PlayerBase { private const float CHECK_INTERVAL = 2; // Интервал проверки положения игрока в секундах private vector lastPos; private float checkCounter; void OnScheduledTick(float deltaTime) { super.OnScheduledTick(deltaTime); if( !IsPlayerSelected() || !IsAlive() ) return; if (checkCounter >= CHECK_INTERVAL) { checkCounter = 0; int liquidType; string surfaceType; GetGame().SurfaceUnderObject(this, surfaceType, liquidType); if (surfaceType == "" && liquidType == -1) { SetPosition(lastPos); } else { lastPos = GetPosition(); } } else { checkCounter = checkCounter + deltaTime; } } override void AfterStoreLoad() { super.AfterStoreLoad(); lastPos = GetPosition(); } }


modded class PlayerBase
{
	private const float	CHECK_INTERVAL = 2; // Интервал проверки положения игрока в секундах
	private vector lastPos;
	private float checkCounter;
	
	void OnScheduledTick(float deltaTime)
	{
		super.OnScheduledTick(deltaTime);
		
		if( !IsPlayerSelected() || !IsAlive() ) return;
		
		if (checkCounter >= CHECK_INTERVAL)
		{
			checkCounter = 0;
			
			int liquidType;
			string surfaceType;
			
			GetGame().SurfaceUnderObject(this, surfaceType, liquidType);
			if (surfaceType == "" && liquidType == -1)
			{
				SetPosition(lastPos);
			}
			else
			{
				lastPos = GetPosition();
			}
		}
		else
		{
			checkCounter = checkCounter + deltaTime;
		}
	
	}
	
	override void AfterStoreLoad()
	{
		super.AfterStoreLoad();
		lastPos = GetPosition();
	}
}

 

Заметил множество проблем с этим скриптом.

1. Откидывает игрока, если он ходит по скалам, камням, пытается спрыгнуть со скал. 

2. Скидывает с вертолета, не дает летать вообще.

3. Если заехать на машине за переделы карты, то выкидывает из машины, можешь бегать за пределами сколько угодно и восстановить персонажа уже целая проблема. Телепорт срабатывает, но под землю. Релог тоже не помогает. Приходится чередовать телепорт через фри камеру и релог. (если без машины зайти за пределы карты, то все нормально)

4. Проблема в зонах с бункерами и сложным маппингом. Откидывает назад постоянно. Даже с мусорки через забор проблема перелезть.

Где вообще можно найти рабочий код?

Edited by SplinterFenix (see edit history)

Share this post


Link to post
Share on other sites
  • 0

@SplinterFenix наверное куда проще будет какие-то безтекстурные, простые стены поставить, чтоб подгружались впритык,  по периметру карты, длиной определённой, что б не баговались ине исчезали. И нагружать не будет и пройти не получится. (хоть и время потребуется конечно, но будет куда продуктивнее)

Share this post


Link to post
Share on other sites
  • 0
06.12.2024 в 20:26, SplinterFenix сказал:

Заметил множество проблем с этим скриптом.

 

Когда просили пример кода, не озвучивали этот ряд условий. Код писался на коленке. Кстати у него есть плюс. Он бесплатный 😀

Share this post


Link to post
Share on other sites
  • 0
1 час назад, nytlenc сказал:

 

Когда просили пример кода, не озвучивали этот ряд условий. Код писался на коленке. Кстати у него есть плюс. Он бесплатный 😀

Так это и не претензия. Да, код выполняет поставленные условия)))

Но напоминает работу хитрой золотой рыбки, мол, надо было уточнять условия иначе получишь чудеса на виражах))))

Но, если можно как-то исправить ситуацию с вертолетами, беганию по скалам - то было бы замечательно)

Или кончились бесплатные желания?))

Share this post


Link to post
Share on other sites
  • 0
17 часов назад, SplinterFenix сказал:

Но напоминает работу хитрой золотой рыбки, мол, надо было уточнять условия иначе получишь чудеса на виражах))))

 

Просто когда пишешь код быстро и "на коленке", про такие вещи не сильно думаешь. Тем более про вертолёты ))))))
Что касается доработать тут конечно под указанные условия нужно садиться и пару дней выделить.

Код который представлен выше - конечно не годится для такого.

Тут нужно изобретать что-то более универсальное, а также учитывать в транспорте игрок или не в транспорте и т.д.

Что делать с транспортом если игрок вдруг решил выехать за карту, вылететь на вертолёте?? Ну и много чего еще над чем подумать.

Конечно такие работы вряд-ли кто-то возьмется делать бесплатно. А если и платно, то скорее всего в приватном порядке - то есть мод будет какой-то изюминкой какого-то сервера, и этим модом естественно особо не захотят делиться с другими.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.