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


Фотография

Проблема при создании миссии.


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

#21 OFFLINE   valka1000

valka1000

    Ефрейтор

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

Отправлено 12 August 2014 - 17:04

 

 

И все равно я до конца не понял. Вы хотите сказать что скрипт вызывается при каждом заходе игрока. Получается что зашел

red1 ему выдалось все что его касается. Когда заходит например red3 то часть скрипта для red1 повторяется !?

 

Да, в вашем случае каждый заходящий инициализирует удаление и раздачу для ВСЕХ.

 

 

Ну и самое главное не пойму как меня спасет вариант с использованием конструкции switch если по идее red1 уже зашел и switch его то же увидит и 

выполнить часть скрипта для него и для только зашедшего red3 ( например )?

И как раз применение конструкции

switch (true) do {};

избавляет от не желательного эффекта.

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

 

А это для общего развития, так сказать

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

http://arma3.ru/foru...kriptopisaniiu/

 

 

За ссылку спасибо ! 

И кажется я понял!

Если я оставлю вызов скрипта с амуницией в файле инит - ничего не поменяется при использовании конструкции switch, так как

case red1:,  сработает то же 35 раз если он зайдет первым.  А вот если я буду вызывать скрипт из инита игрока 0 = [this] execVM "scripts\amunition.sqf";

то тогда речь будет идти об одном игроке _unit     = _this; и тогда swich отработает только для него ... Так ?


Сообщение отредактировал valka1000: 12 August 2014 - 17:05

  • 0

#22 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 12 August 2014 - 17:10


Если я оставлю вызов скрипта с амуницией в файле инит - ничего не поменяется при использовании конструкции switch, так как case red1:,  сработает то же 35 раз если он зайдет первым.  А вот если я буду вызывать скрипт из инита игрока 0 = [this] execVM "scripts\amunition.sqf"; то тогда речь будет идти об одном игроке _unit     = _this; и тогда swich отработает только для него ... Так ?

нет

 

player в скрипте отдает значение имени юнита (red1, red2, red3)

но, так как скрипт init.sqf выполнится локально на клиенте то для каждого отдельного клиента он отработает только один раз, при входе второго, третьего и т.д. клиентов конструкция switch-case будет сравнивать значение их имен switch (player) c параметрами case и выполняь только тот кусок кода, который будет соответствовать (если клиент зашел в бота red11 то отработает только конструкция case red11)


  • 0

#23 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 12 August 2014 - 17:10

 

Но хочу понять вот что, конструкция switch + case фактически подставляет вместо _unit имя слота ( red1, red2 и т.д. ) Так чем она отличается от того что сделал я ?

То есть почему со switch вме будет работать нормально а при прямом прописывании оно будет первому зашедшему red1 ( например ) выполнять то что к нему относиться 35 раз. 

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

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

0 = [this] execVM "scripts\amunition.sqf"; // this это и есть тот кто нам нужен

А ещё более правильный вариант, передать два параметра

0 = [this, "equp_1"] execVM "scripts\amunition.sqf";
где
[
   this,     // подключившийся клиент
   "equp_1"  // название набора экипировки
]

А в amunition.sqf делать выборку

//	 шаблон файла amunition.sqf

_unit 	= _this select 0; // блин) в предыдущем варианте ошибся, надо так)
_equip  = _this select 1;

//	Вот это достаточно прописать один раз, и именно в этом месте
removeAllWeapons _unit;
removeAllItems _unit;
removeAllAssignedItems _unit;
removeBackpack _unit;
removeGoggles _unit;

//	Далее раздача слонов
switch (_equip) do
{
    case "equip_1":
    {
        // red1 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
		
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
 
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
};

  • 1

#24 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 12 August 2014 - 17:15

valka1000 , а вообще послушайтесь совета  SteelRat и разберите его вариант, он более гибкий, чем ваш.


  • 0

#25 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 12 August 2014 - 17:19

valka1000 , а вообще послушайтесь совета  SteelRat и разберите его вариант, он более гибкий, чем ваш.

Уважаемые коллеги! БИСы уже давно придумали шикарнейший вариант, который позволяет вообще творить чудеса, в плане экипировки.

http://arma3.ru/foru...irovka-iunitov/


  • 0

#26 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 12 August 2014 - 17:32

SteelRat

хм, а разве не нужно еще переопределять respawnWeapons[], RespawnItems[]  и т.д.? при игре с респауном снаряга, без них, по идее станет стандартной, а не переопределенной.

 

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


  • 0

#27 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 12 August 2014 - 17:39

SteelRat

хм, а разве не нужно еще переопределять respawnWeapons[], RespawnItems[]  и т.д.? при игре с респауном снаряга, без них, по идее станет стандартной, а не переопределенной.

 

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

Это стандартная БИСовская тема, в плане экипировки.

 

По поводу респавна

player call compile preprocessFileLineNumbers "initLoadEquip.sqf";

или

player execVM "initLoadEquip.sqf";

В правильном месте)


 

 

И там никак не разложить отдельно вещи в разгрузку и рюкзак,

Ну, а насколько важна в арме 3 такая необходимость!?


  • 0

#28 OFFLINE   xPride

xPride

    Старшина

  • Команда HMG
  • 494 сообщений
  • Отряд:[LC]

Отправлено 12 August 2014 - 17:41


Это стандартная БИСовская тема, в плане экипировки.

Да, я это знаю. =)

 


В правильном месте)

 

respawnWeapons[] RespawnItems[] respawnMagazines[] respawnLinkedItems[] это стандартная БИСовская тема, в плане конфигурации =) думаю её будет правильнее использовать


  • 0

#29 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 12 August 2014 - 17:50

 


Это стандартная БИСовская тема, в плане экипировки.

Да, я это знаю. =)

 

 

 


В правильном месте)

 

respawnWeapons[] RespawnItems[] respawnMagazines[] respawnLinkedItems[] это стандартная БИСовская тема, в плане конфигурации =) думаю её будет правильнее использовать

 

функция BIS_fnc_loadInventory не обращается к этим параметрам

 

Это относится только к описанию класса юнита в конфиге

 

А так как мы имеем желание иметь не дэфолтную аммуницию, то при обработке респавна, инициализируем скрипт экипировки, всё просто.


  • 0

#30 OFFLINE   valka1000

valka1000

    Ефрейтор

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

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

 

 

Но хочу понять вот что, конструкция switch + case фактически подставляет вместо _unit имя слота ( red1, red2 и т.д. ) Так чем она отличается от того что сделал я ?

То есть почему со switch вме будет работать нормально а при прямом прописывании оно будет первому зашедшему red1 ( например ) выполнять то что к нему относиться 35 раз. 

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

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

0 = [this] execVM "scripts\amunition.sqf"; // this это и есть тот кто нам нужен

А ещё более правильный вариант, передать два параметра

0 = [this, "equp_1"] execVM "scripts\amunition.sqf";
где
[
   this,     // подключившийся клиент
   "equp_1"  // название набора экипировки
]

А в amunition.sqf делать выборку

//	 шаблон файла amunition.sqf

_unit 	= _this select 0; // блин) в предыдущем варианте ошибся, надо так)
_equip  = _this select 1;

//	Вот это достаточно прописать один раз, и именно в этом месте
removeAllWeapons _unit;
removeAllItems _unit;
removeAllAssignedItems _unit;
removeBackpack _unit;
removeGoggles _unit;

//	Далее раздача слонов
switch (_equip) do
{
    case "equip_1":
    {
        // red1 - Командир
		_unit forceAddUniform "U_I_CombatUniform";
		_unit addVest "V_PlateCarrier3_rgr";
		_unit addHeadgear "H_Booniehat_indp";
		_unit addBackpack "B_AssaultPack_khk";
		_unit addItem "NVGoggles";
		_unit assignItem "NVGoggles";
		_unit addItem "ItemMap";
		_unit assignItem "ItemMap";
		_unit addItem "ItemCompass";
		_unit assignItem "ItemCompass";
		_unit addItem "ItemWatch";
		_unit assignItem "ItemWatch";
		_unit addItem "ItemRadio";
		_unit assignItem "ItemRadio";
 
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "FirstAidKit";
		_unit addItemToBackpack "SmokeShell";
		_unit addItemToBackpack "SmokeShell";
		
		//Оружие и патроны
		_unit addMagazines ["30Rnd_65x39_caseless_green",15];
		_unit addMagazines ["1Rnd_HE_Grenade_shell",6];
 
		_unit addWeapon "arifle_Katiba_GL_ACO_F";
    };
};

Попробовал данный пример ! Не работает ! Начал искать причину , вывел в скрипте передаваемые параметры и удивился ! Пусто ! В скрипт не передается не this не второй параметр! Попробовал передавать только this - тот же результат ... :( Где может быть проблема ?

 

Все ! Нашел причину ! Заработало !!!!


Сообщение отредактировал valka1000: 18 August 2014 - 19:40

  • 0

#31 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 19 August 2014 - 17:11

 

 

Все ! Нашел причину ! Заработало !!!!

А с нами поделитесь? Что мы пропустили)


  • 0

#32 OFFLINE   valka1000

valka1000

    Ефрейтор

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

Отправлено 21 August 2014 - 16:21

 

 

 

Все ! Нашел причину ! Заработало !!!!

А с нами поделитесь? Что мы пропустили)

 

В init.sqf не убрал вызов скрипта :)

 

А еще вопрос: Сколько параметров можно передавать в скрипт командой : 0 = [this, "equp_1"] execVM "scripts\amunition.sqf";

Попробовал передать 3-й параметр - не прошло ... Команда:  _gr = _this select 2; не получила 3-го параметра ...


  • 0

#33 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 21 August 2014 - 17:53

 

 

 

 

Все ! Нашел причину ! Заработало !!!!

А с нами поделитесь? Что мы пропустили)

 

В init.sqf не убрал вызов скрипта :)

 

А еще вопрос: Сколько параметров можно передавать в скрипт командой : 0 = [this, "equp_1"] execVM "scripts\amunition.sqf";

Попробовал передать 3-й параметр - не прошло ... Команда:  _gr = _this select 2; не получила 3-го параметра ...

 

Если вам нужна группа к которой принадлежит юнит вам не нужен 3 параметр

_group = group _unit; 

А параметров может быть столько, сколько нужно


  • 0

#34 OFFLINE   valka1000

valka1000

    Ефрейтор

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

Отправлено 21 August 2014 - 18:09

 

 

 

 

 

Все ! Нашел причину ! Заработало !!!!

А с нами поделитесь? Что мы пропустили)

 

В init.sqf не убрал вызов скрипта :)

 

А еще вопрос: Сколько параметров можно передавать в скрипт командой : 0 = [this, "equp_1"] execVM "scripts\amunition.sqf";

Попробовал передать 3-й параметр - не прошло ... Команда:  _gr = _this select 2; не получила 3-го параметра ...

 

Если вам нужна группа к которой принадлежит юнит вам не нужен 3 параметр

_group = group _unit; 

А параметров может быть столько, сколько нужно

 

 

Нет не группа ! Просто третий параметр который называется param3. Зачем - не важно.

Делаю так: 

В ините игрока вызываю: 0 = [this, "equp_1", "specnaz"] execVM "scripts\amunition.sqf";

 

В скрипте:

 
_unit = _this select 0;
_equip = _this select 1;
_prof = _this select 2;
 

 

hintSilent parseText format["POLUCHILI => %1, %2, %3", _unit, _equip, _prof ];
 
И при заходе игроком первых 2-а параметра вижу а третий пустой ! :(

  • 0

#35 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 21 August 2014 - 19:05

 

 

И при заходе игроком первых 2-а параметра вижу а третий пустой !  :(

А вы уверены что он умещается в строку)?

Потому что всё передано и принято корректно.


  • 0

#36 OFFLINE   valka1000

valka1000

    Ефрейтор

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

Отправлено 22 August 2014 - 13:48

 

 

 

И при заходе игроком первых 2-а параметра вижу а третий пустой !  :(

А вы уверены что он умещается в строку)?

Потому что всё передано и принято корректно.

 

 

Да. Потому как проверял и так:

 

Передаю:

0 = [this, "red1_kom", "kkk"] execVM "scripts\amunition.sqf";

 

В скрипте вывожу:

_unit = _this select 0;
_equip = _this select 1;
_sss = _this select 2;
 
hintSilent parseText format["ODEVAEN => %1", _sss ];
 
И ничего не выводится...

  • 0

#37 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 22 August 2014 - 18:29

 

 

 

 

И при заходе игроком первых 2-а параметра вижу а третий пустой !  :(

А вы уверены что он умещается в строку)?

Потому что всё передано и принято корректно.

 

 

Да. Потому как проверял и так:

 

Передаю:

0 = [this, "red1_kom", "kkk"] execVM "scripts\amunition.sqf";

 

В скрипте вывожу:

_unit = _this select 0;
_equip = _this select 1;
_sss = _this select 2;
 
hintSilent parseText format["ODEVAEN => %1", _sss ];
 
И ничего не выводится...

 

А попробуйте просто, вот так

systemChat format["POLUCHILI => %1, %2, %3", _unit, _equip, _prof ];

  • 0

#38 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 22 August 2014 - 18:35

И пожалуйста, когда выкладываете именно код, оформляйте его, как это делаю я.

Там где отвечаете, нажмите батончик <>


  • 0

#39 OFFLINE   valka1000

valka1000

    Ефрейтор

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

Отправлено 22 August 2014 - 18:36

 

 

 

 

 

И при заходе игроком первых 2-а параметра вижу а третий пустой !  :(

А вы уверены что он умещается в строку)?

Потому что всё передано и принято корректно.

 

 

Да. Потому как проверял и так:

 

Передаю:

0 = [this, "red1_kom", "kkk"] execVM "scripts\amunition.sqf";

 

В скрипте вывожу:

_unit = _this select 0;
_equip = _this select 1;
_sss = _this select 2;
 
hintSilent parseText format["ODEVAEN => %1", _sss ];
 
И ничего не выводится...

 

А попробуйте просто, вот так

systemChat format["POLUCHILI => %1, %2, %3", _unit, _equip, _prof ];

 

_unit = _this select 0;
_equip = _this select 1;
_sss = _this select 2;
 
systemChat format["POLUCHILI => %1, %2, %3", _unit, _equip, _sss ];
 
Первых 2-а получил - третий <null> 

  • 0

#40 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 22 August 2014 - 18:40

Ок! Вам удалось меня заинтиговать!


  • 0




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