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

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

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

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
inQ4

Старт лут для отдельного игрока

Вопрос

Приветствую, напишите кто-нибудь по пунктно как для себя установить стартовый лут и точку спавна, где, что и как.

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


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

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

  • 1

в mpmissions\dayzOffline.chernarusplus\init.c

есть блок

override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
	{
		Entity playerEnt;
		playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
		Class.CastTo(m_player, playerEnt);
		
		GetGame().SelectPlayer(identity, m_player);
		
		return m_player;
	}

это спавн персонажа. перед строкой

playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player

добавляем

pos="14749.70 0.0 13248.70";

и точка спавна готова

Далее

у нас имеется там же блок

override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
	{
/*
		player.RemoveAllItems();

		EntityAI item = player.GetInventory().CreateInInventory(topsMissionArray.GetRandomElement());
		EntityAI item2 = player.GetInventory().CreateInInventory(pantsArray.GetRandomElement());
		EntityAI item3 = player.GetInventory().CreateInInventory(shoesArray.GetRandomElement());
*/
		EntityAI itemTop;
		EntityAI itemEnt;
		ItemBase itemBs;
		float rand;
		
		itemTop = player.FindAttachmentBySlotName("Body");
		
		if ( itemTop )
		{
			itemEnt = itemTop.GetInventory().CreateInInventory("Rag");
			if ( Class.CastTo(itemBs, itemEnt ) )
				itemBs.SetQuantity(4);

			SetRandomHealth(itemEnt);
			
			itemEnt = itemTop.GetInventory().CreateInInventory("RoadFlare");
			SetRandomHealth(itemEnt);
		
			itemEnt = itemTop.GetInventory().CreateInInventory("StoneKnife");
			SetRandomHealth(itemEnt);
		}

		rand = Math.RandomFloatInclusive(0.0, 1.0);
		if ( rand < 0.25 )
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Cola");
		else if ( rand > 0.75 )
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Spite");
		else
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Pipsi");
		
		SetRandomHealth(itemEnt);

		rand = Math.RandomFloatInclusive(0.0, 1.0);
		if ( rand < 0.35 )
			itemEnt = player.GetInventory().CreateInInventory("Apple");
		else if ( rand > 0.65 )
			itemEnt = player.GetInventory().CreateInInventory("Pear");
		else
			itemEnt = player.GetInventory().CreateInInventory("Plum");
		
		SetRandomHealth(itemEnt);
	}

здесь

itemTop = player.FindAttachmentBySlotName("Body");
		
		if ( itemTop )
		{
			itemEnt = itemTop.GetInventory().CreateInInventory("Rag");
			if ( Class.CastTo(itemBs, itemEnt ) )
				itemBs.SetQuantity(4);

			SetRandomHealth(itemEnt);
			
			itemEnt = itemTop.GetInventory().CreateInInventory("RoadFlare");
			SetRandomHealth(itemEnt);
		
			itemEnt = itemTop.GetInventory().CreateInInventory("StoneKnife");
			SetRandomHealth(itemEnt);
		}

		rand = Math.RandomFloatInclusive(0.0, 1.0);
		if ( rand < 0.25 )
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Cola");
		else if ( rand > 0.75 )
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Spite");
		else
			itemEnt = player.GetInventory().CreateInInventory("SodaCan_Pipsi");
		
		SetRandomHealth(itemEnt);

		rand = Math.RandomFloatInclusive(0.0, 1.0);
		if ( rand < 0.35 )
			itemEnt = player.GetInventory().CreateInInventory("Apple");
		else if ( rand > 0.65 )
			itemEnt = player.GetInventory().CreateInInventory("Pear");
		else
			itemEnt = player.GetInventory().CreateInInventory("Plum");
		
		SetRandomHealth(itemEnt);

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

player.RemoveAllItems();

ну а далее сочиняем так как вам надо

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


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


  • 0

можно еще конкретизировать? на той же точке спавна, не понял как конкретно для себя или для кого-то еще указать точку.

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


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

Я это уже объяснял в какой-то из тем по standalone в разделе помощи.

Для конкретного игрока что именно? Позиция? лут?

 

Тогда так, в самое начало инита дописываем функции:

string GetPlayerSteam64ID(PlayerBase player)
{
	string return_mess = "";
	if (player)
	{
		PlayerIdentity p_identity = player.GetIdentity();
		if (p_identity)
		{
			private string UID_P = p_identity.GetPlainId();
			return_mess = UID_P;
		}
	}
	return return_mess;
}

bool Contain_in_list_uids(string uid_check, string uid_list)
{
	bool return_zn = false;
	if (uid_list.Contains(uid_check))
	{
		return_zn = true;
	}
}

Если нужно для позиции игрока, то:

вместо

pos="14749.70 0.0 13248.70";

вставляем:

if(Contain_in_list_uids(identity.GetPlainId(), "765..."))
{
	pos="14749.70 0.0 13248.70";
}

где 765... это steam64id ваш

Если по поводу лута, то

if(Contain_in_list_uids(GetPlayerSteam64ID(player), "765..."))
{
	//тут твой лут
}

где 765... это steam64id ваш, ну а внутри скобок сам лут на данного игрока.
Вместо одного UID вместо 765... можно несколько указать, например так:

"7654...,765333,76332..."

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

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


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

Я это уже объяснял в какой-то из тем по standalone в разделе помощи.

Для конкретного игрока что именно? Позиция? лут?

 

Тогда так, в самое начало инита дописываем функции:


string GetPlayerSteam64ID(PlayerBase player)
{
	string return_mess = "";
	if (player)
	{
		PlayerIdentity p_identity = player.GetIdentity();
		if (p_identity)
		{
			private string UID_P = p_identity.GetPlainId();
			return_mess = UID_P;
		}
	}
	return return_mess;
}

bool Contain_in_list_uids(string uid_check, string uid_list)
{
	bool return_zn = false;
	if (uid_list.Contains(uid_check))
	{
		return_zn = true;
	}
}

Если нужно для позиции игрока, то:

вместо


pos="14749.70 0.0 13248.70";

вставляем:


if(Contain_in_list_uids(identity.GetPlainId(), "765..."))
{
	pos="14749.70 0.0 13248.70";
}

где 765... это steam64id ваш

Если по поводу лута, то


if(Contain_in_list_uids(GetPlayerSteam64ID(player), "765..."))
{
	//тут твой лут
}

где 765... это steam64id ваш, ну а внутри скобок сам лут на данного игрока.
Вместо одного UID вместо 765... можно несколько указать, например так:

"7654...,765333,76332..."

 

 

конкретно какое начало инита? немного не понятно это, кинь строку перед которой вставлять.)

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


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

 

 

конкретно какое начало инита? немного не понятно это, кинь строку перед которой вставлять.)

выше читайте, писал в 1 сообщении что и как. Конкретнее тут лишь в конкретном случае случае смогу сказать, и лишь в конкретной ситуации о всеми подробностями. Откуда я знаю что именно и кому вы там выдавать собрались.
Или вы хотите, чтобы вам все дали в готовеньком виде, как на заказ? Так за это могу пред на форуме нарисовать, мне не жалко.
Безымянный.png

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


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

123new Если не сложно, можно пример init.c с выдачей одному конкретному игроку например АКМ, магазин на него, ну и сет ТТСКО? Почему спрашиваю, будет сразу же понятно всем как прописать несколько позиций лута, так как в примере написано "тут твой лут", но есть же определенный синтаксис написания, поэтому очень много вопросов, а так всё будет наглядно. Заранее благодарен.

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


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

Gizda тогда встречный вопрос, что в вашем понимании 'сет ТТСКО'? Чтобы уж точно сделать то что вы просите

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


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

123new  TTSKOPants, TTSKOBoots,TTsKOJacket_Camo,AKM,Mag_AKM_30Rnd - вот весь набор для примера

Немного симпровизировал, но принцип тот же. С пояснениями необходимый блок:

if(Contain_in_list_uids(GetPlayerSteam64ID(player), "765..."))
{
	player.RemoveAllItems(); // Удаляем с игркоа все вещи перед спавном нужных
	
	EntityAI item_In_Player; EntityAI item_In_item; // Задаем основные используемые переменные
	
	item_In_Player = player.GetInventory().CreateInInventory( "CombatBoots_Green" ); // Спавним игроку башмаки
	item_In_Player = player.GetInventory().CreateInInventory( "ChildBag_Green" ); // Спавним игроку рюкзак
	if (item_In_Player)                                                              // Проверяем появился ли рюкзак
	{
		item_In_Player.GetInventory().CreateInInventory( "Mag_AKM_30Rnd" );  // Добавляем в рюкзак патроны
		item_In_Player.GetInventory().CreateInInventory( "Mag_AKM_30Rnd" ); 
		item_In_Player.GetInventory().CreateInInventory( "Mag_AKM_30Rnd" ); 
		item_In_Player.GetInventory().CreateInInventory( "Mag_AKM_30Rnd" );
	};
	item_In_Player = player.GetInventory().CreateInInventory( "BallisticHelmet_Green" ); // Спавним игроку шлем
	item_In_Player = player.GetInventory().CreateInInventory( "HighCapacityVest_Olive" );	// Спавним игроку разгрузку
	item_In_Player = player.GetInventory().CreateInInventory( "TTSKOPants" );  // Спавним игроку штаны
	item_In_Player = player.GetInventory().CreateInInventory( "TTsKOJacket_Camo" );  // Спавним игроку куртку

	item_In_Player = player.GetInventory().CreateInInventory( "AKM" );  // Спавним игроку АКМ
	if (item_In_Player)                                           // Проверяем появился ли АКМ               
	{
		item_In_Player.GetInventory().CreateAttachment( "AK_Suppressor" );  // В АКМ добавляем глушитель
		item_In_Player.GetInventory().CreateAttachment( "AK_WoodBttstck" );   // В АКМ добавляем приклад
		item_In_item = item_In_Player.GetInventory().CreateAttachment( "GrozaOptic" ); // В АКМ добавляем прицел
		if (item_In_item)                                                               // Проверяем появился ли прицел на АКМ
		{		
			item_In_item.GetInventory().CreateAttachment( "Battery9V" );	// В прицел на АКМ добавляем батарейку
		}
		//item_In_Player.GetInventory().CreateAttachment( "Mag_AKM_30Rnd" );  // Добавление а таком виде в АКМ магазина не работает корректно!!!
		//item_In_Player.GetInventory().CreateInInventory( "Mag_AKM_30Rnd" );  // Добавление а таком виде в АКМ магазина не работает корректно!!!
	}
}

добавляем в конце функции 'StartingEquipSetup(PlayerBase player, bool clothesChosen)' перед ее закрытием и готово.
Разумеется, описанный ранее блок в виде 2 функций

string GetPlayerSteam64ID(PlayerBase player)
{
	string return_mess = "";
	if (player)
	{
		PlayerIdentity p_identity = player.GetIdentity();
		if (p_identity)
		{
			private string UID_P = p_identity.GetPlainId();
			return_mess = UID_P;
		}
	}
	return return_mess;
}

bool Contain_in_list_uids(string uid_check, string uid_list)
{
	bool return_zn = false;
	if (uid_list.Contains(uid_check))
	{
		return_zn = true;
	}
	return return_zn;
}

также надо добавить в начале самого init, иначе сервер не запустится!

 

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

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

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


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

123new спасибо. Я правильно понял что создав второй блок можно сделать еще один комплект? сколько блоков столько и комплектов?

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


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

123new можно еще вопрос? Правильно ли вставил блок в файл?

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

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


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

Gizda нет, вставлять его надо перед закрывающей скобкой функции StartingEquipSetup, я не просто так это пометил.

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


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

Полностью рабочий init.c с индивидуальным сетом по GUID ,  проверен. 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

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


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

смотря что ты под этим понимаешь. Например 2 яблока это 2 записи на спавн яблока.

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


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

Я в принципе понял ответ на свой вопрос. Но, другой вопрос просто для уточнения.
Команда: SetRandomHealthItem(itemCreated) - создает рандомное качество.  А как правильно указываются определенные качества? Например сильно поврежденное: SetBadlydamagedHealthItem, или Set20HealthItem, или как? Где-то можно посмотреть грамотное указание состояния здоровья предметов?
 

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


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

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

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


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

ElBorodos а бог его знает, я лично не в курсе. Тут лучше копайся в оригинальных скриптах и смотри официальные примеры

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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