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


Фотография

Опытные, подскажите.


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

#1 OFFLINE   Lucky_l2p

Lucky_l2p

    Рядовой

  • Пользователи
  • 6 сообщений
  • Откуда:Челябинск

Отправлено 26 November 2024 - 19:10

Суть в чём. Написал мини скрипт на рандомную снарягу для юнитов, выглядит так:

_unit = _this select 0

_Weaponarray = ["rhs_weap_ak74", "rhs_weap_ak74_2", "rhs_weap_ak74m", "rhs_weap_ak74m_camo", "rhs_weap_ak74m_fullplum"];

_PrimaryWeaponarray = ["rhs_acc_dtk"];

_PrimaryMagazinearray = ["rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N10_AK", "rhs_30Rnd_545x39_7N10_camo_AK", "rhs_30Rnd_545x39_7N10_plum_AK", "rhs_30Rnd_545x39_7N10_2mag_AK", "rhs_30Rnd_545x39_7N10_2mag_camo_AK"];
						 
_Backpackarray = ["CUP_B_Kombat_Olive", "CUP_B_AlicePack_Bedroll", "CUP_B_AlicePack_Khaki", "CUP_B_AlicePack_OD"];
				  
_Gogglesarray = ["PATH","SE_GP7", "SE_PPM88"];

_Headarray = ["CUP_H_RUS_Altyn_khaki", "CUP_H_RUS_Altyn", "rhs_altyn_novisor_ess", "rhs_ssh68_2", "h_afou_ssh68_dubok01", "h_afou_ssh68_dubok02", "cwr3_o_headgear_ssh68_camo", "cwr3_o_headgear_ssh68", "cwr3_o_headgear_ssh68_cover", "rhsgref_ssh68_ttsko_dark"];

_Uniformarray = ["SCE_Military_1", "SCE_Military_2", "SCE_Military_3"];

_randomWeapon = _Weaponarray call BIS_fnc_selectRandom;
_randomPrimaryWeapon = _PrimaryWeaponarray call BIS_fnc_selectRandom;
_randomPrimaryMagazine = _PrimaryMagazinearray call BIS_fnc_selectRandom;
_randomBackpack = _Backpackarray call BIS_fnc_selectRandom;
_randomGoggles = _Gogglesarray call BIS_fnc_selectRandom;
_randomHead = _Headarray call BIS_fnc_selectRandom;
_randomUniform = _Uniformarray call BIS_fnc_selectRandom;

_unit addWeapon _randomWeapon;
_unit addPrimaryWeaponItem _randomPrimaryWeapon;
_unit addPrimaryWeaponItem _randomPrimaryMagazine;
_unit addBackpack _randomBackpack;
_unit addGoggles _randomGoggles;
_unit addHeadgear _randomHead;
_unit forceAddUniform _randomUniform;

_unit addItemToUniform "ACE_EarPlugs";
for "_i" from 1 to 3 do {_unit addItemToUniform "FirstAidKit";}; 
for "_i" from 1 to 2 do {_unit addItemToUniform "rhs_mag_rgd5";};

for "_i" from 1 to 2 do {_unit addItemToVest "rhs_mag_rgd5";};
for "_i" from 1 to 7 do {_unit addItemToVest _randomPrimaryMagazine;};

for "_i" from 1 to 15 do {_unit addItemToBackpack _randomPrimaryMagazine;};
for "_i" from 1 to 2 do {_unit addItemToBackpack "rhs_mag_rdg2_white";};
for "_i" from 1 to 2 do {_unit addItemToBackpack "rhs_mag_rgd5";};
for "_i" from 1 to 2 do {_unit addItemToBackpack "rhs_mag_f1";}; 

exit 

Так вот, подскажите, пожалуйста, как оптимизировать это более правильно чтобы не плодить 20 таких документов. Допустим выпадает число "1", там оружие "Калаши" ему выдаётся снаряжение такое-то. Выпадает "2", там НАТОвское оружие, боеприпасы. Саму часть рандома эту. Весь день пытаюсь сделать через "If" и тд, нихрена не получается


Сообщение отредактировал Lucky_l2p: 26 November 2024 - 19:51

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 26 November 2024 - 20:15

private _loadout = switch ((floor (random _number)) + 1) do {
    case 1: { [...] };
    case 2: { [...] };
    ...
    default { [...] };
};

_unit setUnitLoadout _loadout;

Сообщение отредактировал Schatten: 26 November 2024 - 21:29

  • 0

#3 OFFLINE   Lucky_l2p

Lucky_l2p

    Рядовой

  • Пользователи
  • 6 сообщений
  • Откуда:Челябинск

Отправлено 26 November 2024 - 20:46

private _loadout = switch ((floor (random _number)) + 1) do {
    case 1: { [...] };
    case 2 : { [...] };
    ...
    default { [...] };
};

_unit setUnitLoadout _loadout;

Можно более подробней, я хз как это адаптировать если честно, куда и что конкретно писать


  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 26 November 2024 - 21:29

Читаешь

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

, составляешь снаряжение и пользуешься.


  • 0

#5 OFFLINE   Lucky_l2p

Lucky_l2p

    Рядовой

  • Пользователи
  • 6 сообщений
  • Откуда:Челябинск

Отправлено 01 December 2024 - 10:03

Читаешь

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

, составляешь снаряжение и пользуешься.

С этим со всем разобрался, подскажи ещё момент, пожалуйста. 
 

_RandomKolvo1 = selectRandom [0, 1, 2];

for "_i" from 1 to _RandomKolvo1 do {_unit addItemToBackpack "rhs_mag_rgd5";};
for "_i" from 1 to _RandomKolvo1 do {_unit addItemToBackpack "rhs_mag_f1";};
for "_i" from 1 to _RandomKolvo1 do {_unit addItemToBackpack "FirstAidKit";};

Как сделать, чтобы было рандомное количество РГД-5, Ф-1, Аптечек. Потому что, когда переменная выпадает 2, то у меня всего по 2. 1-1 и тд. Хотелось бы создать небольшой разброс, элемент рандома. Или нужно писать каждую. переменную и тд?


Сообщение отредактировал Lucky_l2p: 01 December 2024 - 10:03

  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 01 December 2024 - 20:08

С этим со всем разобрался

К сожалению, нифига ты не разобрался.
 

Как сделать, чтобы было рандомное количество РГД-5, Ф-1, Аптечек. Потому что, когда переменная выпадает 2, то у меня всего по 2. 1-1 и тд. Хотелось бы создать небольшой разброс, элемент рандома. Или нужно писать каждую. переменную и тд?

Логично, что всего по 2, -- ты же одну и ту же переменную используешь. Используй случайные значения в циклах напрямую.


  • 0

#7 OFFLINE   Lucky_l2p

Lucky_l2p

    Рядовой

  • Пользователи
  • 6 сообщений
  • Откуда:Челябинск

Отправлено 02 December 2024 - 09:56

 

С этим со всем разобрался

К сожалению, нифига ты не разобрался.

Как сделать, чтобы было рандомное количество РГД-5, Ф-1, Аптечек. Потому что, когда переменная выпадает 2, то у меня всего по 2. 1-1 и тд. Хотелось бы создать небольшой разброс, элемент рандома. Или нужно писать каждую. переменную и тд?

Логично, что всего по 2, -- ты же одну и ту же переменную используешь. Используй случайные значения в циклах напрямую.

С первым сделал как мне нужно было, у меня ошибка была в том, что я неправильной командой скрипт вызывал, из-за этого и If не срабатывало, а вообще решение сделал так как и хотел
 

_Ra = selectRandom [1,2,3];
_unit = _this select 0;

_WeapSLOT1 = ["rhs_weap_aks74u", "rhs_weap_aks74un", "CUP_arifle_AKS74U"];
_randomWeapSLOT1 = selectRandom _WeapSLOT1;
_ObvesWeapSLOT1 =  ["PATH", "rhs_acc_pgs64_74u", "rhs_acc_pgs64_74un", "rhs_acc_pbs4", "CUP_muzzle_PBS4"];
_randomObvesWeapSLOT1 = selectRandom _ObvesWeapSLOT1;
_MagazineSLOT1 = ["rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N10_AK", "rhs_30Rnd_545x39_7N10_camo_AK", "rhs_30Rnd_545x39_7N10_plum_AK", "rhs_30Rnd_545x39_7N10_2mag_AK", "rhs_30Rnd_545x39_7N10_2mag_camo_AK"];
_randomMagazineSLOT1 = selectRandom _MagazineSLOT1;

_WeapSLOT2 = ["rhs_weap_aks74n_gp25", "rhs_weap_aks74_gp25", "rhs_weap_ak74mr_gp25", "rhs_weap_ak74m_gp25", "rhs_weap_ak74m_fullplum_gp25", "rhs_weap_ak74n_gp25", "rhs_weap_ak74n_2_gp25", "rhs_weap_ak74_gp25"];
_randomWeapSLOT2 = selectRandom _WeapSLOT2;
_ObvesWeapSLOT2 =  ["PATH", "rhs_acc_pgs64_74u", "rhs_acc_pgs64_74un", "rhs_acc_pbs4", "CUP_muzzle_PBS4", "CUP_muzzle_TGPA", "CUP_muzzle_TGPA_woodland", "CUP_muzzle_snds_KZRZP_AK545", "CUP_muzzle_snds_KZRZP_AK545_woodland", "rhs_acc_tgpa"];
_randomObvesWeapSLOT2 = selectRandom _ObvesWeapSLOT2;
_MagazineSLOT2 = ["rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N10_AK", "rhs_30Rnd_545x39_7N10_camo_AK", "rhs_30Rnd_545x39_7N10_plum_AK", "rhs_30Rnd_545x39_7N10_2mag_AK", "rhs_30Rnd_545x39_7N10_2mag_camo_AK"];
_randomMagazineSLOT2 = selectRandom _MagazineSLOT2;

_WeapSLOT3 = ["rhs_weap_aks74u", "rhs_weap_aks74un", "CUP_arifle_AKS74U", "rhs_weap_aks74n", "rhs_weap_aks74n_2", "rhs_weap_aks74", "rhs_weap_ak74m", "rhs_weap_ak74m_zenitco01", "rhs_weap_ak74m_camo", "rhs_weap_ak74m_fullplum", "rhs_weap_ak74n", "rhs_weap_ak74n_2", "rhs_weap_ak74", "rhs_weap_ak74_3", "rhs_weap_ak74_2"];
_randomWeapSLOT3 = selectRandom _WeapSLOT3;
_ObvesWeapSLOT3 =  ["PATH", "rhs_acc_pgs64_74u", "rhs_acc_pgs64_74un", "rhs_acc_pbs4", "CUP_muzzle_PBS4", "CUP_muzzle_TGPA", "CUP_muzzle_TGPA_woodland", "CUP_muzzle_snds_KZRZP_AK545", "CUP_muzzle_snds_KZRZP_AK545_woodland", "rhs_acc_tgpa"];
_randomObvesWeapSLOT3 = selectRandom _ObvesWeapSLOT3;
_MagazineSLOT3 = ["rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N6_AK", "rhs_30Rnd_545x39_7N10_AK", "rhs_30Rnd_545x39_7N10_camo_AK", "rhs_30Rnd_545x39_7N10_plum_AK", "rhs_30Rnd_545x39_7N10_2mag_AK", "rhs_30Rnd_545x39_7N10_2mag_camo_AK"];
_randomMagazineSLOT3 = selectRandom _MagazineSLOT3;

if (_Ra == 1) then {
	_unit addWeapon _randomWeapSLOT1;
	_unit addPrimaryWeaponItem _randomObvesWeapSLOT1;
	_unit addPrimaryWeaponItem _randomMagazineSLOT1;
		if true then {
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToVest _randomMagazineSLOT1;};		// Магазины в ЖИЛЕТ
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToBackpack _randomMagazineSLOT1;};		// Магазины в РЮКЗАК
		};
};
if (_Ra == 2) then {
	_unit addWeapon _randomWeapSLOT2;
	_unit addPrimaryWeaponItem _randomObvesWeapSLOT2;
	_unit addPrimaryWeaponItem _randomMagazineSLOT2;
	_unit addPrimaryWeaponItem "rhs_VOG25";
		if true then {
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToVest _randomMagazineSLOT2;};		// Магазины в ЖИЛЕТ
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToVest "rhs_VOG25";};
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToBackpack _randomMagazineSLOT2;};		// Магазины в РЮКЗАК
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToBackpack "rhs_VOG25";};
		};
};
if (_Ra == 3) then {
	_unit addWeapon _randomWeapSLOT3;
	_unit addPrimaryWeaponItem _randomObvesWeapSLOT3;
	_unit addPrimaryWeaponItem _randomMagazineSLOT3;
		if true then {
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToVest _randomMagazineSLOT3;};		// Магазины в ЖИЛЕТ
			for "_i" from 1 to _RandomKolvoMag do {_unit addItemToBackpack _randomMagazineSLOT3;};		// Магазины в РЮКЗАК
		};
}; 

Если вкратце у каждого рандомится определенное оружие, которое я задал. Да и со случайными числами нашёл выход через "floor (random 3)", не знаю конечно насколько это всё грамотно и оптимизировано, но в целом работает как мне надо. Опыт пока только набираю


Сообщение отредактировал Lucky_l2p: 02 December 2024 - 09:59

  • 0

#8 OFFLINE   Schatten

Schatten

    Капитан

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

Отправлено 02 December 2024 - 12:58

params ["_unit"];

private _loadout = getUnitLoadout _unit;

switch ([1, 3] call BIS_fnc_randomInt) do {
    case 1: {
        private _magazine = selectRandom [
            ["rhs_30Rnd_545x39_7N6_AK", 30],
            ["rhs_30Rnd_545x39_7N10_AK", 30],
            ["rhs_30Rnd_545x39_7N10_camo_AK", 30],
            ["rhs_30Rnd_545x39_7N10_plum_AK", 30],
            ["rhs_30Rnd_545x39_7N10_2mag_AK", 30],
            ["rhs_30Rnd_545x39_7N10_2mag_camo_AK", 30]
        ];

        _loadout set [
            0, // primary weapon
            [
                selectRandom ["rhs_weap_aks74u", "rhs_weap_aks74un", "CUP_arifle_AKS74U"],
                selectRandom ["PATH", "rhs_acc_pgs64_74u", "rhs_acc_pgs64_74un", "rhs_acc_pbs4", "CUP_muzzle_PBS4"],
                "", // pointer
                "", // optics
                _magazine,
                [], // 2nd muzzle magazine
                "" // bipod
            ]
        ];

        ((_loadout select 4) select 1) pushBack [ // vest
            _magazine select 0,
            [1, 3] call BIS_fnc_randomInt,
            _magazine select 1
        ];
        ((_loadout select 5) select 1) pushBack [ // backpack
            _magazine select 0,
            [2, 4] call BIS_fnc_randomInt,
            _magazine select 1
        ];
    };
    case 2: { ... };
    ...
    default { ... };
};

_unit setUnitLoadout _loadout;

Сообщение отредактировал Schatten: 02 December 2024 - 12:59

  • 0




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