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


Фотография

Производительность и waitUntil


Лучший Ответ SteelRat , 19 September 2015 - 23:15

WaitUntil {sleep 0.1; player ammo primaryWeapon player == 0 && !(str (primaryWeaponMagazine player) == "[]")};

В данном случае не обязательна, частая проверка условия.

 

Более подходящим вариантом я считаю эвантхандлер

https://community.bi..._Handlers#Fired

_EHFiredIdx = player addEventHandler ["Fired", {
	params["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"];
	if (_unit ammo _weapon == 0) then {
		_unit addMagazine [_magazine, 0];
	};
}];

player setVariable ["EHFiredIdx", _EHFiredIdx];
Перейти к сообщению


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

#1 OFFLINE   ruPal

ruPal

    Мл. лейтенант

  • HMG-RO
  • 914 сообщений

Отправлено 19 September 2015 - 19:48

Есть такой код:
 

WaitUntil {player ammo primaryWeapon player == 0 && !(str (primaryWeaponMagazine player) == "[]")};
_currentWeapon = primaryWeapon player;
_currentMagazine = (primaryWeaponMagazine player) select 0;
WaitUntil {primaryWeapon player == _currentWeapon && (player ammo _currentWeapon > 0 || (str (primaryWeaponMagazine player)) == "[]")};
player addMagazine [_currentMagazine, 0];

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


Сообщение отредактировал ruPal: 19 September 2015 - 19:59

  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 19 September 2015 - 23:15   Лучший Ответ

WaitUntil {sleep 0.1; player ammo primaryWeapon player == 0 && !(str (primaryWeaponMagazine player) == "[]")};

В данном случае не обязательна, частая проверка условия.

 

Более подходящим вариантом я считаю эвантхандлер

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

_EHFiredIdx = player addEventHandler ["Fired", {
	params["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"];
	if (_unit ammo _weapon == 0) then {
		_unit addMagazine [_magazine, 0];
	};
}];

player setVariable ["EHFiredIdx", _EHFiredIdx];

  • 0

#3 OFFLINE   ruPal

ruPal

    Мл. лейтенант

  • HMG-RO
  • 914 сообщений

Отправлено 20 September 2015 - 14:46

WaitUntil {sleep 0.1; player ammo primaryWeapon player == 0 && !(str (primaryWeaponMagazine player) == "[]")};

В данном случае не обязательна, частая проверка условия.

 

Более подходящим вариантом я считаю эвантхандлер

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

_EHFiredIdx = player addEventHandler ["Fired", {
	params["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"];
	if (_unit ammo _weapon == 0) then {
		_unit addMagazine [_magazine, 0];
	};
}];

player setVariable ["EHFiredIdx", _EHFiredIdx];

Спасибо. Event handler не поможет, так как игрок может перезарядить оружие через инвентарь, а он это не учитывает. Вариант выше учитывает этот момент. Ограничюсь командов sleep.


Сообщение отредактировал ruPal: 20 September 2015 - 15:00

  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 27 September 2015 - 18:27

Пустой магазин на прямую из пушки в инвентарь не положишь, нужен хитрожопый манёвр, которым вряд ли кто то будет заниматься при перезарядке.

Когда из магазина будет отстрелян последний патрон, в инвентарь положится пустой, вам ведь это нужно, вам же не нужно отслеживать не пустые магазины.

Просто добавьте ещё команду удаляющую пустой магазин из пушки, только и всего. 


  • 0




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