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

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

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

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

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

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

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

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


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

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

  • 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();
	}
}

 

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

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


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

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

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


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

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

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

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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();
	}
}

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
06.01.2023 в 15:45, XenoZD сказал:

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

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

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


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

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

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

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

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

 

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

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

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


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

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

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

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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. Проблема в зонах с бункерами и сложным маппингом. Откидывает назад постоянно. Даже с мусорки через забор проблема перелезть.

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

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

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
06.12.2024 в 20:26, SplinterFenix сказал:

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

 

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

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


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

 

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

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

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

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

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

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


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

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

 

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

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка