inQ4

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

Вопрос

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

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


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

14 ответов на этот вопрос

в 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();

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

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


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


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

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


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

Я это уже объяснял в какой-то из тем по 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 (история изменений)

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


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

 

 

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

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


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

 

 

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

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

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


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

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

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


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

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

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


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

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

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


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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас