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

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

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

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

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

Вопрос к знатокам

Есть такая тема. Написал я большой кусок кода для арены где человек прописывает команду в чат, далее запускается функция баланса которая определяет команду игрока. Далее идет функция одевания игрока и перемещения в определенный пул векторов.

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

if(check_Msg == "test")
	{
		PlayerItmCrt(check_Chanel, check_Name_P, check_Msg, player,1);
	}


Где чек меседж это проверка написания в чат. Отдельная функция.

 

В таком случае написав в чат "test" запускается функция чтения файла и сбора данных для дальнейшего одевания.

Но почему то это не работает если мы добавляем телепорт в функцию тобишь так

 

if(check_Msg == "!Арена")		
		if(distanceDeath > 1)
		{
					PlayerItmCrt(check_Chanel, check_Name_P, check_Msg, player,1);

					private array <vector>  spawnpointsOne = {"941 37 309", "952 37 309", "956 37 309", "967 37 309"};
					private vector selected_spawnpointOne = spawnpointsOne.GetRandomElement();
					player.SetPosition(selected_spawnpointOne);

			
		}


Притом что даже простое написание 
player.GetInventory().CreateInInventory("GorkaHelmet_Black");
То оно срабатывает

Вот функция одевания

 

static void GiveITM(PlayerBase player, string TypeToItm, int rndMIN, int rndMAX, bool SetQ, bool RunQuickBar ,int CountQuickBar, TStringArray ArrAtachment)
	{
		
		EntityAI itmCreate = NULL;
		ItemBase itmCasted = NULL;
			
			
		int RndINT = Math.RandomIntInclusive(rndMIN, rndMAX);

		itmCreate = player.CreateInInventory(TypeToItm);
		
			if (itmCreate && SetQ)																
			{
				itmCasted = ItemBase.Cast(itmCreate);
				itmCasted.SetQuantity(RndINT);						
			}
			
			if(RunQuickBar)
			player.SetQuickBarEntityShortcut(itemCreated ,CountQuickBar , true);
			
			if(!line_content.Contains("NO"))
			{
				for(int i = 0, i > ArrAtachment.Count(), i++)
				{
					itmCreate.GetInventory().CreateAttachment(ArrAtachment[i]); 
				}

			}
	}
	}

Как показала практика если ставить какую то переменную то это не будет работать по какой то причине вот как пример

itmCrt = player.GetInventory().CreateInInventory("GorkaHelmet_Black");

Хз что за особенности такие в скриптах, но может кто сталкивался?

И да все производится в moded missionserver

Мб в другой класс перенести?

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


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

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

  • 1
if(distanceDeath > 1)

советую залогировать что попадает в переменную

насчет одевания и телепорта - все дело в синхронизации. Вы перезайдите на сервер после этого - все должно появиться. Угадал? Если да, то функцию телепорта после выдачи лута поставьте, вопрос решится.

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


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





  • 0

Добавлю что в случее добавления телепорта, то телепорт сам срабатывает а функция одежды фиг. Хз что за магия.

И еще если тебя уже телепортануло и ты снова пишешь тп на арену то он уже срабатывает полноценно. Мб памяти не хватает или еще что то.

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

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


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

if(distanceDeath > 1)


if(distanceDeath > 1)

советую залогировать что попадает в переменную

насчет одевания и телепорта - все дело в синхронизации. Вы перезайдите на сервер после этого - все должно появиться. Угадал? Если да, то функцию телепорта после выдачи лута поставьте, вопрос решится.


Да все красиво. Хз почему десинхрон такой ловит)

А в дистанции distanceDeath просто проверка статы человека идет типо так

float distanceDeath;
 distanceDeath = player.StatGet("playtime");    

Там берется время жизни персонажа в секундах.(Я просто не стал скидывать все функции и скрипты на 700+ строк 😄)

Спасибо большое все работает. Теперь главное запомнить эту особенность)

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

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


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

Хз почему десинхрон такой ловит)

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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