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

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

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

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

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

Удаление трупов игроков в зоне.

Добрый день. Для развлечения игроков на ПВЕ сервере, сделали ПВП зону. Сделал чистку зоны от лута по таймеру, но вот как удалять трупы игроков никак не найду.

В конфиге выставлено по умолчанию и менять это нельзя (ПВЕ сервер и игрок должен успеть добежать). А вот в зоне надо удалять чаще - после 20 минут ПВП начинает лагать всех в зоне

 

Пробовал перебирать всех игроков в радиусе и проверять статус EPlayerStates.DEAD но это работает только в момент смерти (пока игрок видит надпись "вы умерли") и удаляет объект, но бывает на этом экране зависает игра.

Скрытый текст

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(SafeZoneClining, 300000, true); //таймер
void SafeZoneClining()
{  
	//указываем зоны для очистки, (координаты центра зоны), зона радиусом 200
	ZoneClining("11024 14.3 9443"); // ПВП зона
}/**/
void ZoneClining(vector centerPos)
{ 
	ref array<Man> players = new array<Man>;
    GetGame().GetPlayers( players );
	private string log_message = "";
    for ( int i = 0; i < players.Count(); i++ )
    {
        PlayerBase dead_player;
        Class.CastTo(dead_player, players.Get(i));
        vector pos = dead_player.GetPosition();
		
		float distance_pl = vector.Distance( pos, centerPos );
		
        if ( distance_pl < Clining_Radius ) 
		{
			if (dead_player.GetPlayerState() == EPlayerStates.DEAD)
			{
				dead_player.Delete();
				logZC = "[ZoneClining] Dead player: " + dead_player + "; in pos " + pos + ", is delet:";
				SaveLog(logZC, "ZoneClining");
			}
			else
			{
				logZC = "[ZoneClining] Player: " + dead_player + "; in pos " + pos + ", is not dead";
				SaveLog(logZC, "ZoneClining");
			}
		}
	}
}

 

После того как игрок нажал кнопку возродиться статус уже не работает и объект игрока не удаляется. 

Это логично, так как я проверяю по базе игроков и после возрождения игрок уже имеет другой объект.

Как мне удалять трупы через время, не сразу при смерти.

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


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

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

  • 0

Когда игрок вошел в зону загоняем его в массив - вышел - удаляем из массива
Проверяя зону - проверяем и массив с игроками на предмет IsAlive()

Если вертает false - player.Delete();

Ну а в этом случае

if (!dead_player.IsAlive()) player.Delete();

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

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


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





  • 0

Не помогло, удаляет трупы только в момент смерти пока игрок не нажал "восстановить" и только тогда когда попадает время чистки

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(ZoneClining, 300000, true); //очистка зон каждые 5 минут

 

можно сделать чистку чаще, 0.5 сек и тогда будет удалять - но надо чтоб труп полежал немного (чтоб его могли облутать)

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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