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
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

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

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 1
if(distanceDeath > 1)

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

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

Share this post


Link to post
Share on other sites



  • 0

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

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

Edited by kkac9kk (see edit history)

Share this post


Link to post
Share on other sites
  • 0
4 часа назад, 123new сказал:

if(distanceDeath > 1)


if(distanceDeath > 1)

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

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


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

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

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

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

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

Edited by kkac9kk (see edit history)

Share this post


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

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

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

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.