Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a theme in the appropriate section
    No need to write everything in the chat!
  • Sell or buy?

    Use the services of a guarantor
    We will make your transaction safe
  • Don't want a BAN?

    Please read our rules
    Don't disturb the order
  • Visit the market

    There you can sell or buy
    Everything related to game servers
  • 0
inQ4

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

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

Share this post


Link to post
Share on other sites

21 answers to this question

Recommended Posts

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

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

Share this post


Link to post
Share on other sites

  • 0

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

Share this post


Link to post
Share on other sites
  • 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..."

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 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..."

 

 

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

Share this post


Link to post
Share on other sites
  • 0
12 минуты назад, inQ4 сказал:

 

 

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 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, иначе сервер не запустится!

 

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

Может подсказать?
Как можно прописать качество предмета в стартовом луте? 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...