Jump to content


Photo

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


Best Answer 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];
Go to the full post


  • Please log in to reply
3 replies to this topic

#1 OFFLINE   ruPal

ruPal

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

  • HMG-RO
  • 914 posts

Posted 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];

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


Edited by ruPal, 19 September 2015 - 19:59.

  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 19 September 2015 - 23:15   Best Answer

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 posts

Posted 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.


Edited by ruPal, 20 September 2015 - 15:00.

  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 27 September 2015 - 18:27

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

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

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


  • 0




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