Перейти к содержимому


Фотография

Экипировка юнитов


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 80

#1 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 11 April 2014 - 22:26

1 Скачиваем архив и распаковываем в папку с миссией, архив содержит три файла

initLoadEquip.sqf
CfgEquipUnits.hpp
CfgEquipWIPs.hpp

2 В init.sqf миссии добавляем это

if !(isDedicated) then {
	player call compile preprocessFileLineNumbers "initLoadEquip.sqf";
};

3 В description.ext миссии добавляем это

#include "CfgEquipUnits.hpp"
#include "CfgEquipWIPs.hpp"

Почему именно так? Да потому что я фанат комфорта, и мне на много удобней не копаться в километровом файле, а на много приятней открыть конкретный файл, и увидеть в нём конкретный класс, над которым я буду издеваться. Короче, содержимое файлов "CfgEquipUnits.hpp" и "CfgEquipWIPs.hpp" можно скопировать в description.ext, а сами эти файлы выкинуть.

В комментариях к этим файлам описано как ими пользоваться.

 

В файле  "CfgEquipUnits.hpp" вы описываете какую экипировку должен иметь конкретный класс юнита, кусочек конфига

        class B_Soldier_F {	
		uniformClass[] = {"U_I_G_resistanceLeader_F"};
		magazines[] = {"30Rnd_65x39_caseless_mag","HandGrenade", "HandGrenade"};
		linkedItems[] = {"V_Rangemaster_belt"};
		items[] = {"FirstAidKit"};
	};

Эффект, при инициализации игрока который будет управлять данным классом юнита, будет удалено всё, и добавлено только то что описано выше

 

В файле  "CfgEquipWIPs.hpp" вы описываете какую экипировку должен иметь конкретны игрок присоединившийся к игре, кусочек конфига

//	Первый Крутой перец
	class 0000000000000001 {
		uniformClass[] = {"U_I_G_resistanceLeader_F"};
		backpack[] = {"B_AssaultPack_rgr_Medic"};
		linkedItems[] = {"V_Rangemaster_belt"};
	};

Именем этого класса должен быть UID принадлежащий этому крутому перцу.

Эффект, при инициализации, этот Крутой перец получит свою экипировку не зависимо от того каким классом юнита он будет управлять.

 

И попрошу иметь в виду такой момент, в конфигурации не должно быть классов оформленных подобным образом

        class B_Soldier_F {	
		uniformClass[] = {};
		magazines[] = {};
		linkedItems[] = {};
		items[] = {};
	}; 

Вы получите ошибку.

Если вы горите желанием оставить зашедшего в игру в чём мать родила, оформляете конфиг так

class B_Soldier_F {}; 

Прикрепленный файл  EquipUnits.rar   2.84К   270 Количество загрузок:

 


Сообщение отредактировал SteelRat: 11 April 2014 - 22:47

  • 4

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 11 April 2014 - 22:44

Да, если нужно будет приодеть бота, в инит бота пишем

this call compile preprocessFileLineNumbers "initLoadEquip.sqf"

Сообщение отредактировал SteelRat: 11 April 2014 - 22:48

  • 0

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 April 2014 - 20:16

Давайте сегодня перетряхнём инвентарь техники и ящиков

И как говаривал Беларуский батька, пэрэтрахывать эти объекты мы будем в классе CfgEquipUnits

Открываем файл CfgEquipUnits.hpp и добавим пару новых классов

class CfgEquipUnits {

	class B_MRAP_01_F { // Синий охотник, ну, синий, бывает
	
		class TransportMagazines { // Магазины, в этой секции перечисляются магазины и их кол-во, которое нужно поместить в объект
		
			class _xx_30Rnd_556x45_Stanag { // Именем этих классов должен быть класс магазина, перед которым всегда должна быть приставка _xx_
				magazine = "30Rnd_556x45_Stanag"; // Класс магазина
				count = 8; // Кол-во магазинов
			};
			
			class _xx_20Rnd_556x45_UW_mag {
				magazine = "20Rnd_556x45_UW_mag";
				count = 20;
			};
		};
		
		class TransportWeapons { // Оружие
		
			class _xx_arifle_MX_F {
				weapon = "arifle_MX_F";
				count = 4;
			};
			
			class _xx_SMG_01_F {
				weapon = SMG_01_F;
				count = 5;
			};
			
			class _xx_hgun_P07_F {
				weapon = "hgun_P07_F";
				count = 10;
			};
			
			class _xx_hgun_Pistol_heavy_01_F {
				weapon = "hgun_Pistol_heavy_01_F";
				count = 15;
			};
		};
		
		class TransportItems { // Всё остальное, кроме рюкзаков
		
			class _xx_Rangefinder {
				name = "Rangefinder";
				count = 1;
			};
			
			class _xx_Medikit {
				name = "Medikit";
				count = 3;
			};
			
			class _xx_ToolKit {
				name = "ToolKit";
				count = 1;
			};
			
			class _xx_FirstAidKit {
				name = "FirstAidKit";
				count = 10;
			};
			
			class _xx_U_I_G_resistanceLeader_F {
				name = "U_I_G_resistanceLeader_F";
				count = 10;
			};
		};
	};
	
	class Box_NATO_Wps_F { // Ящик, тоже синий
	
		class TransportMagazines {
		
			class _xx_30Rnd_556x45_Stanag {
				magazine = "30Rnd_556x45_Stanag";
				count = 8;
			};
			
			class _xx_20Rnd_556x45_UW_mag {
				magazine = "20Rnd_556x45_UW_mag";
				count = 20;
			};
		};
		
		class TransportWeapons {
		
			class _xx_arifle_MX_F {
				weapon = "arifle_MX_F";
				count = 4;
			};
			
			class _xx_SMG_01_F {
				weapon = SMG_01_F;
				count = 5;
			};
			
			class _xx_hgun_P07_F {
				weapon = "hgun_P07_F";
				count = 10;
			};
			
			class _xx_hgun_Pistol_heavy_01_F {
				weapon = "hgun_Pistol_heavy_01_F";
				count = 15;
			};
		};
		
		class TransportItems {
		
			class _xx_Rangefinder {
				name = "Rangefinder";
				count = 1;
			};
			
			class _xx_Medikit {
				name = "Medikit";
				count = 3;
			};
			
			class _xx_ToolKit {
				name = "ToolKit";
				count = 1;
			};
			
			class _xx_FirstAidKit {
				name = "FirstAidKit";
				count = 10;
			};
			
			class _xx_U_I_G_resistanceLeader_F {
				name = "U_I_G_resistanceLeader_F";
				count = 10;
			};
		};
	};
	
	//	И так далее
};

Если техника и ящики расставляются в редакторе, добавляем в инит объекта вызов

0 = this execVM "initLoadEquip.sqf"

Сообщение отредактировал SteelRat: 12 April 2014 - 20:51

  • 2

#4 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 April 2014 - 20:28

Если объекты инвентарь которых нужно пэрэтрахывать спавнит код в процессе миссии, и если этих объектов много, процесс пэрэтрахывания можно оформить по компактней

_group 		= createGroup west;
_newUnit 	= _group createUnit ["B_Soldier_F", _positionSpawn,[],0,"NONE"];

_car = createVehicle [_carType, _carPos, [], 0, "CAN_COLLIDE"];
_heli = createVehicle [_heliType, _heliPos, [], 0, "CAN_COLLIDE"];
_boat = createVehicle [_boatType, _boatPos, [], 0, "CAN_COLLIDE"];
_ammoBox = createVehicle [_ammoBoxType, _ammoBoxPos, [], 0, "CAN_COLLIDE"];
_weaponBox = createVehicle [_weaponBoxType, _weaponBoxPos, [], 0, "CAN_COLLIDE"];

{
	_x execVM "initLoadEquip.sqf";
} forEach [_newUnit,_car,_heli,_boat,_ammoBox,_weaponBox];

Сообщение отредактировал SteelRat: 12 April 2014 - 20:51

  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 12 April 2014 - 20:35

Идиотизм! И это факт.

БИСовская функция

BIS_fnc_loadInventory

Услугами которой пользуется эта тема, не предоставляет возможности добавлять рюкзаки в технику и ящики.

Дело конечно поправимое, достаточно прочитать пару молитв над этой БИСовщиной, и она будет делать всё.

Но! Идиотизм. Других слов нет.


  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 00:00

 

Кладу в директорию с миссией два файла, состряпанных мною, но нужного мне действия - перевооружения синих пулеметчиков со штатного оружия на пулемет "Зафир" - не присходит. Хотелось бы знать, в чем и где моя ошибка, а также, если избранный мною путь неверен, то указать правильное напрвление, в котором нужно двигаться для достижения нужной цели. Здесь мне не удается прикрепить файлы. Не подскажите как это сделать, либо указать где мы можем встретиться для их передачи.

Странно, только сейчас заметил, что мое самое первое сообщение на эту тему обрывается на ссылке, а сущность вопроса почему-то не отправилась. Так вот, попытаюсь заново изложить то, что было после ссылки.

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

 

Знания скриптовых команд вам здесь не понадобится, здесь важно правильно оформить конфиг.

 

Пара наводящих вопросов

 

Положили ли в папку с миссией этот файл

initLoadEquip.sqf

И точно ли выполнили этих два условия

 

2 В init.sqf миссии добавляем это

if !(isDedicated) then {
    player call compile preprocessFileLineNumbers "initLoadEquip.sqf";
}; 

3 В description.ext миссии добавляем это

#include "CfgEquipUnits.hpp"
#include "CfgEquipWIPs.hpp"

И давайте наверное сюда миссию


  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 00:10

Кстати, синие пулемётчики, это будут боты или игроки? В смысле сингл или мультиплеер?


  • 0

#8 OFFLINE   10258

10258

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 04 September 2014 - 10:09

Миссия - сингл. Файлы в прикреплении.

Прикрепленные файлы

  • Прикрепленный файл  files.rar   761байт   41 Количество загрузок:

  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 17:22

Миссия - сингл. Файлы в прикреплении.

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

 

Вариант 1

В инит бота пишем

0 = this execVM "initLoadEquip.sqf"

Вариант 2, обработать всех сразу оптом, скину по позже.


  • 0

#10 OFFLINE   10258

10258

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 04 September 2014 - 17:33

Вариант 1 - индивидуальный - не подходит. У меня уже подобная система стоит: прописываю в графе ОПРЕДЕЛЕНИЕ каждого юнита (ботов и игрока) файл .sqf, где указывается нужное снаряжение и оружие. Но это несколько, мягко говоря, утомительно и непродуктивно. Поэтому с нетерпением жду вариант 2.


  • 0

#11 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 17:34

Замените код в файле init.sqf

if (isServer) then {
	{
		if !(isPlayer _x) then {
			_x call compile preprocessFileLineNumbers "initLoadEquip.sqf";
		};
	} foreach allUnits;
};

Отпишите, как прошло.


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 17:44

И ещё, вот эту стороку в файле init.sqf

_x call compile preprocessFileLineNumbers "initLoadEquip.sqf";

Вполне можно записать и так

_x execVM "initLoadEquip.sqf";

В файле initLoadEquip.sqf

(_this select 0) execVM "initLoadEquip.sqf";

Сообщение отредактировал SteelRat: 04 September 2014 - 17:49

  • 0

#13 OFFLINE   10258

10258

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 04 September 2014 - 18:18

Гм. Для ботов вроде роботает. А для игрока - нет. Т.е. если бот - пулеметчик, то замена происходит, а если пулеметчик - игрок, то - нет. И еще вопрос: как снарягу, магазины и прочие плюшки раскладывать по конкретным адресам? Ну там, что в карман, что в разгрузку, что в рюкзак? И еще: как зарядить оружие начальным магазином?


  • 0

#14 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 04 September 2014 - 18:23

Ну там, что в карман, что в разгрузку, что в рюкзак?

addItemToUniform - в униформу
addItemToVest - в разгрузку/бронежилет
addItemToBackpack - в рюкзак

И еще: как зарядить оружие начальным магазином?

1. Добавить нужный магазины
2. Добавить оружие
  • 0

#15 OFFLINE   10258

10258

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 04 September 2014 - 18:30

addItemToUniform - в униформу
addItemToVest - в разгрузку/бронежилет
addItemToBackpack - в рюкзак

 

Это, я как понял, для sqf файлов, а какой синтаксис для аналогичного действия в hpp?


Сообщение отредактировал 10258: 04 September 2014 - 18:42

  • 0

#16 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 04 September 2014 - 18:33

10258, честно ХЗ, да и непонятно почему вы в .hpp делаете скрипты для Армочки, а не в .sqf
  • 0

#17 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 18:36

10258, честно ХЗ, да и непонятно почему вы в .hpp делаете скрипты для Армочки, а не в .sqf

Файлы с расширением *.hpp это не файлы с кодом, а файлы с конфигурацией


  • 0

#18 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 18:42

Гм. Для ботов вроде роботает. А для игрока - нет. Т.е. если бот - пулеметчик, то замена происходит, а если пулеметчик - игрок, то - нет. И еще вопрос: как снарягу, магазины и прочие плюшки раскладывать по конкретным адресам? Ну там, что в карман, что в разгрузку, что в рюкзак? И еще: как зарядить оружие начальным магазином?

 

Тогда так

if (isServer) then {
	{
		if !(isPlayer _x) then {
			_x call compile preprocessFileLineNumbers "initLoadEquip.sqf";
		};
	} foreach allUnits;
};

if !(isDedicated) then {
        player call compile preprocessFileLineNumbers "initLoadEquip.sqf";
};

 

 

И еще вопрос: как снарягу, магазины и прочие плюшки раскладывать по конкретным адресам? Ну там, что в карман, что в разгрузку, что в рюкзак?

Через эту тему у вас это не получится, да и если честно не вижу в этом ни какого смысла, применительно к арме 3

 

 

 

 И еще: как зарядить оружие начальным магазином?

Это отдельно написанным скриптом


  • 0

#19 OFFLINE   10258

10258

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 04 September 2014 - 18:51

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


  • 0

#20 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 04 September 2014 - 19:05

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

Кодом можно делать всё, ну или почти всё.

Но я хочу обратить ваше внимание на вот что, вы и так в конфигурационном файле CfgEquipUnits.hpp описываете , что должен иметь при себе конкретный класс юнитов.

 

Если вы станете тоже самое делать кодом, вот вам пример, это шаблон, в том же разделе я где то более развёрнуто эту тему пережёвывал, поищите сами, мне в лом)

 http://arma3.ru/forums/topic/3086-neskolko-neslozhnykh-nubskikh-voprosov/?p=31021

 

И ещё раз обращу ваше внимание, вы получите тоже самое, но будет на много больше писанины


  • 0




Яндекс.Метрика