Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
BigCrazyCat

[ГАЙД] Оружие за спиной. Как носить два основных оружия

Рекомендованные сообщения

Описание: данная модификация предоставляет возможность носить два основных оружие одновременно - одно в руках, другое - за спиной.
Оружие за спиной сохраняется в БД, не пропадает после переодевания, добавляется в тело персонажа после его смерти.
 
1. Нам понадобятся следующие кастомные файлы: compiles.sqf, variables.sqf, fn_selfActions.sqf, player_switchModel.sqf, player_gearSet.sqf, player_death.sqf, dayz_spaceInterrupt.sqf.
Все файлы копируем в папку custom и подключаем.
 
Подробнее:

compiles.sqf, variables.sqf подключаются в init.sqf (меняете пути на свои).
Другие кастомные файлы подключатся в compiles.sqf (меняете пути на свои).
Найти их можно в @DayZ_Epoch/addons/dayz_code.pbo.
 
Серверная часть. Путь: @DayZ_Epoch_Server\addons\dayz_server\compile\server_playerSync.sqf.
Фильтр BattleEye. Путь: instance_11_Chernarus\BattlEye\publicVariable.txt (зависит от карты)
 
Все файлы сохраняйте в кодировке UTF-8 (без BOM).


2. В fn_selfActions.sqf:


Добавляем в начале, после блока //Grab Flare, следующий код:

_dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
_dayz_onBackActive = player getVariable ["dayz_onBackActive",false];
_primaryWeapon = primaryWeapon player;
 
if (_dayz_onBack != "EMPTY" && !_dayz_onBackActive && !_inVehicle && !_onLadder) then {
	if (s_player_equip_carry < 0) then {
		_text = getText (configFile >> "CfgWeapons" >> _dayz_onBack >> "displayName");
		_text2 = ("Оружие "+ str(_text));
		s_player_equip_carry = player addAction [_text2, "custom\player_switchWeapon.sqf", "action", 0.5, false, true];
	};
} else {
	player removeAction s_player_equip_carry;
	s_player_equip_carry = -1;
};
 
if (_dayz_onBack == "EMPTY" && _primaryWeapon != "") then {
	if (s_player_equip_toback < 0) then {
		_text = getText (configFile >> "CfgWeapons" >> _primaryWeapon >> "displayName");
		s_player_equip_toback = player addAction [format["<t color=""#888888"">'%1' за спину</t>",_text], "custom\player_addWeaponToBack.sqf", "action", 0.5, false, true];
		int_addToBack = _primaryWeapon;
	} else {
		if (_primaryWeapon != int_addToBack) then {
			int_addToBack = _primaryWeapon;
			_text = getText (configFile >> "CfgWeapons" >> _primaryWeapon >> "displayName");
			player removeAction s_player_equip_toback;
			s_player_equip_toback = player addAction [format["<t color=""#888888"">'%1' за спину</t>",_text], "custom\player_addWeaponToBack.sqf", "action", 0.5, false, true];
		};	
	};
} else {
	player removeAction s_player_equip_toback;
	s_player_equip_toback = -1;
}; 

 

Добавляем действия "Оружие за спину" и "Взять оружие из-за спины" в скрол меню.
 
3. Создаем папку custom/func и формируем два файла с нашими функциями.

player_addWeaponToBack.sqf

 

int_addWeaponToBack = {
_primaryWeapon = primaryWeapon player;
player removeWeapon _primaryWeapon;
player setVariable ["dayz_onBack", _primaryWeapon, true];
_onbackName = getText (configFile >> "CfgWeapons" >> _primaryWeapon >> "displayName");
DiagLog = format ["%2 added %1 (%3) to back", _onbackName, (name player), _primaryWeapon];
publicVariable "DiagLog";
};
 
_this call int_addWeaponToBack;

 

Функция перемещает оружие за спину. Также, в дополнении предоставлен один из способов логирования некоторых событий или действий. В данном случае, мы записываем в лог информацию о том, что игрок взял оружие за спину. Таким образом, вы можете следить за популярностью опции и контролировать взаимодействие игроков с ней.
 
player_switchWeapon.sqf

 

private ["_event", "_onLadder", "_inVehicle", "_isOk", "_primary", "_current", "_rifle", "_pistol", "_melee"];
_event = if (count _this > 1) then { _this select 3 } else { _this select 0 };
_findRifle = {
    private ["_return", "_primary"];
    _return = "";
    _primary = primaryWeapon player;
 
    if (_primary != "") then {
        if !(_primary in MeleeWeapons) then {
            _return = _primary;
        };
    };
    _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
    if (_dayz_onBack != "EMPTY" && _return == "") then {
        if !(_dayz_onBack in MeleeWeapons) then {
            _return = _dayz_onBack;
        };
    };
    _return;
};
 
_findMelee = {
    private ["_return", "_primary"];
    _return = "";
    _primary = primaryWeapon player;
    if (_primary != "") then {
        if (_primary in MeleeWeapons) then {
            _return = _primary;
        };
    };
    _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
    if (_dayz_onBack != "EMPTY" && _return == "") then {
        if (_dayz_onBack in MeleeWeapons) then {
            _return = _dayz_onBack;
        };
    };
 
    _return;
};
 
_findPistol = {
    private ["_return"];
    _return = "";
 
    {
        if (getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 2) then {
            _return = _x;
        };
    } foreach (weapons player);
 
    _return;
};
 
_selectMuzzle = {
    private ["_return", "_wpn", "_muzzles"];
    _wpn = _this select 0;
    _muzzles = getArray(configFile >> "cfgWeapons" >> _wpn >> "muzzles");
 
    if (_muzzles select 0 != "this") then {
        _return = (_muzzles select 0);
    } else {
        _return = _wpn;
    };
 
    _return;
};
 
_clearActions = {
    if (s_player_equip_carry > -1) then {
        player removeAction s_player_equip_carry;
        s_player_equip_carry = -1;
    };
};
 
_switchPrimary = {
    private ["_primary", "_current"];
    _primary = primaryWeapon player;
    _current = currentWeapon player;
    _timer = 0;
 
    [] call _clearActions;
    if (_primary != "") then {
        _animState = animationState player;
 
        switch (true) do {
            case (_animState == "amovpknlmstpsraswrfldnon_gear" || _animState == "amovpercmstpsraswrfldnon_gear"): {
                player playMove "amovpknlmstpslowwrfldnon_amovpknlmstpsraswrfldnon";
                waitUntil { animationState player == "amovpknlmstpslowwrfldnon_amovpknlmstpsraswrfldnon" };
            };
            case (_animState == "amovpknlmstpsraswpstdnon_gear" || _animState == "amovpercmstpsraswpstdnon_gear"): {
                player playMove "amovpknlmstpslowwpstdnon_gear_amovpknlmstpsraswpstdnon";
                waitUntil { animationState player == "amovpknlmstpslowwpstdnon_gear_amovpknlmstpsraswpstdnon" };
            };
            case (["aidlpercmstpslowwrfldnon", _animState] call fnc_inString): {
                player playMove "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon";
                waitUntil { animationState player == "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon" };
            };
        };
        player removeWeapon _primary;
        if (_current != [] call _findPistol) then {
            _timeout = diag_tickTime + 2;
            _animArray = [
                "amovpercmstpsraswrfldnon_amovpercmstpsnonwnondnon",
                "amovpercmstpsraswrfldnon_amovpercmstpsraswpstdnon", 
                "amovpknlmstpsraswrfldnon_amovpknlmstpsraswpstdnon", 
                "amovppnemstpsraswrfldnon_amovppnemstpsnonwnondnon", 
                "amovppnemstpsraswrfldnon_amovppnemstpsraswpstdnon" 
            ];
 
            waitUntil { (animationState player) in _animArray || diag_tickTime >= _timeout };
            waitUntil { !((animationState player) in _animArray) || diag_tickTime >= _timeout };
        };
    };
    
    _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
    if (_dayz_onBack != "EMPTY") then {
        player addWeapon _dayz_onBack;
        player selectWeapon ([_dayz_onBack] call _selectMuzzle);
    };
    
    if (_primary != "") then {
        player setVariable ["dayz_onBack", _primary, true];
    } else {
        player setVariable ["dayz_onBack", "EMPTY", true];
    };
 
    _primaryName = getText (configFile >> "CfgWeapons" >> _primary >> "displayName");
    _onbackName = getText (configFile >> "CfgWeapons" >> _dayz_onBack >> "displayName");
    
    if (_primaryName != "") then {
        DiagLog = format ["%3 switched from %1 (%4) to %2 (%5)", _primaryName, _onbackName, (name player), _primary, _dayz_onBack];
        publicVariable "DiagLog";
    } else {
        DiagLog = format ["%2 take %1 (%3) from back to gear", _onbackName, (name player), _dayz_onBack];
        publicVariable "DiagLog";
    };
    call dayz_meleeMagazineCheck;
};
 
_switchPrimaryUI = {
    private ["_primary", "_current"];
    _primary = primaryWeapon player;
    _current = currentWeapon player;
 
    [] call _clearActions;
 
    if (_primary != "") then {
        player removeWeapon _primary;
    };
 
    _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
    if (_dayz_onBack != "EMPTY") then {
        player addWeapon _dayz_onBack;
 
        if (_primary == _current) then {
            player selectWeapon ([_dayz_onBack] call _selectMuzzle);
        };
    };
 
    if (_primary != "") then {
        player setVariable ["dayz_onBack", _primary, true];
    } else {
        player setVariable ["dayz_onBack","EMPTY", true];
    };
};
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_inVehicle = (vehicle player != player);
_dayz_onBackActive = player getVariable ["dayz_onBackActive",false];
_isOK = (!_onLadder && !_inVehicle && !r_player_unconscious && !_dayz_onBackActive);
if (_isOK) then { player setVariable ["dayz_onBackActive", true, true] };
switch (_event) do {
    case "action": {
        if (_isOK) then {
            [] call _switchPrimary;
        };
    };
    case "gear": {
        [] call _switchPrimaryUI;
    };
    case "rifle": {
        if (_isOK) then {
            _rifle = [] call _findRifle;
            
            if (_rifle == "") then {
            _rifle = [] call _findMelee;
            };
 
            if (_rifle != "") then {
                _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
                if (_rifle == _dayz_onBack) then {
                    [] call _switchPrimary;
                } else {
                    player selectWeapon ([_rifle] call _selectMuzzle);
                };
            } else { systemChat "Слот пустой.";};
        };
    };
    case "pistol": {
        if (_isOK) then {
            _pistol = [] call _findPistol;
 
            if (_pistol != "") then {
                player selectWeapon ([_pistol] call _selectMuzzle);
            } else { systemChat "Слот пустой.";};
        };
    };
    case "second": {
        if (_isOK) then {
            _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
            if (_dayz_onBack != "EMPTY") then {
                [] call _switchPrimary;
            } else { systemChat "Слот пустой.";};
        };
    };
    case "melee": {
        if (_isOK) then {
            _melee = [] call _findMelee;
 
            if (_melee != "") then {
                _dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
                if (_melee == _dayz_onBack) then {
                    [] call _switchPrimary;
                } else {
                    player selectWeapon ([_melee] call _selectMuzzle);
                };
            } else { systemChat "Слот пустой.";};
        };
    };
};
if (_isOK) then {player setVariable ["dayz_onBackActive", false, true]};

 

Функции отвечают за поиск оружия в слотах, его перемещение и анимацию.
 
4. В player_switchModel.sqf:


После:

_magazines = _countMags select 0;

Добавляем:

_dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];

После:

_newUnit setDir _dir; 

Добавляем:

_newUnit setVariable ["dayz_onBack",_dayz_onBack,true];
_newUnit setVariable ["dayz_onBackActive", false, true]; 

После:

{player reveal _x} count (nearestObjects [getPosATL player, dayz_reveal, 50]); 

Добавляем:

player setVariable ["dayz_onBack", _dayz_onBack, true];
player setVariable ["dayz_onBackActive", false, true]; 

В секцию private добавляем:

,"_dayz_onBack" 

 

Сохраняем оружие, которое было за спиной, при смене скина.
 
5. В player_gearSet.sqf:


После:

_mags = _inventory select 1;

Добавляем:

if (count _inventory > 2) then {
    _backweap = _inventory select 2;
    player setVariable ["dayz_onBack",_backweap,true];
} else {
    player setVariable ["dayz_onBack","EMPTY",true];
};

В секцию private добавляем:

,"_backweap"

 


6. В player_death.sqf:


После:

disableUserInput true;

Добавляем:

_dayz_onBack = _body getVariable ["dayz_onBack","EMPTY"];
if (_dayz_onBack != "EMPTY") then {
    _body addWeapon _dayz_onBack;
};

В секцию private добавляем:

,"_dayz_onBack"

 

Сохраняем оружие, которое было за спиной, в луте персонажа после смерти.
 
7. В dayz_spaceInterrupt.sqf:

 

if (_dikCode in[0x02,0x03,0x04,0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3D,0x3C,0x3B,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05]) then {
    _handled = true;
}; 

На:

switch (_dikCode) do {
    case 0x02: {
        ["rifle"] spawn player_switchWeapon;
        _handled = true;
    };
    case 0x03: {
        ["second"] spawn player_switchWeapon;
        _handled = true;
    };
    default {
        if (_dikCode in [0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3D,0x3C,0x3B,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04]) then {
            _handled = true;
        };
    };
}; 

 

Назначаем смену оружия на клавиши "1" и "2".
 
8. В compiles.sqf:


После:

fn_gearMenuChecks = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_gearMenuChecks.sqf"; 

Добавляем:

player_addWeaponToBack =    compile preprocessFileLineNumbers "custom\func\player_addWeaponToBack.sqf";
player_switchWeapon =    compile preprocessFileLineNumbers "custom\func\player_switchWeapon.sqf";

 Ищем:

dayz_meleeMagazineCheck = { 

И заменяем всю функцию на:

dayz_meleeMagazineCheck = {
    private["_meleeNum","_magType"];
    _wpnType = primaryWeapon player;
    if (_wpnType in MeleeWeapons) then {
        _magType = ([] + getArray (configFile >> "CfgWeapons" >> _wpnType >> "magazines")) select 0;
        if (isNil "_magType") exitWith {};
        _meleeNum = ({_x == _magType} count magazines player);
        if (_meleeNum < 1) then {
            player addMagazine _magType;
        };
    };
}; 

 

Объявляем новые функции и редактируем dayz_meleeMagazineCheck.
 
9. В variables.sqf:


После:

dayz_resetSelfActions = {

Добавляем:

s_player_equip_toback = -1;
s_player_equip_carry = -1;

 

Избегаем спама, связанного с действиями, в клиентском логе.


10. В init.sqf:


Для того, чтобы логирование правильно функционировало, добавим обработчик события.
После:

if (isServer) then {

Добавляем:

diag_server_log = compile preprocessFileLineNumbers "scripts\diagLog.sqf";
"DiagLog" addPublicVariableEventHandler {_id = (_this select 1) spawn diag_server_log};

И сразу подключим простой скрипт, который сделает оружие за спиной не активным при входе. Внизу добавьте:

execVM "scripts\onLogin.sqf";

 

 


11. В каталоге scripts создадим 2 файла.


diagLog.sqf

private ["_targetObj"];
_targetObj = _this;
diag_log format["DIAG_LOG: %1",_targetObj];

onLogin.sqf

disableSerialization;
waitUntil { !isNil "dayz_animalCheck" };
 
player setVariable ["dayz_onBackActive",false, true];

 

 


12. В server_playerSync.sqf:


Ищем:

_playerGear = [weapons _character,_magazines]; 

Заменяем на:

_playerGear = [weapons _character,_magazines, _character getVariable ["dayz_onBack","EMPTY"]]; 

 

Сохраняем оружие за спиной в базу данных.


13. И последнее. Добавим исключение в фильтр publicVariable для нашего логера. 


Добавьте в конец второй строки:

!="DiagLog" 

 

 


На этом закончим. Если гайд был полезен, не забудьте поставить плюс :)
 
Скриншоты. Дополнение отлично сочитается с графическими хоткеями.
268d05a0417d4604bfc837c06a9a87e0.png 3846d2ba595644ad8ad8254eb0000359.png

Изменено пользователем BigCrazyCat (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





Все отлично работает! Единственное поправьте в гайде  

  1. после строки player_switchWeapon =    compile preprocessFileLineNumbers "custom\func\player_switchWeapon.sqf" нужно добавить ;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот это годно ибо сохраняет в бд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Топ!!!
Только как мне его к своему HotKey прикрутить?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Топ!!!

Только как мне его к своему HotKey прикрутить?????

Пример:

_dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
if (!isNil "_dayz_onBack") then {_pic3 = gettext(configFile >> 'CfgWeapons' >> _dayz_onBack >> 'picture');};
Изменено пользователем BigCrazyCat (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 Добрый день! подскажите пожалуйста как добавить ["cashMoney",0],

  1. _playerGear = [weapons _character,_magazines, _character getVariable ["dayz_onBack","EMPTY"]];  

 а то вместо наличных около иконки появляется "EMPTY"

Изменено пользователем Dirzo (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если вы используете ZSC 3.0:
1. От мода уже есть кастомный player_gearSet.sqf
Найдите:

if (count _inventory > 2) then {
    _money = _inventory select 2;
    player setVariable["cashMoney",_money,true];
} else {
    player setVariable["cashMoney",0,true];
};

Добавьте ниже:

if (count _inventory > 3) then {
    _backweap = _inventory select 3;
    player setVariable ["dayz_onBack",_backweap,true];
} else {
    player setVariable ["dayz_onBack","EMPTY",true];
};

2. server_playerSync.sqf.
Замените:

_playerGear = [weapons _character,_magazines,_character getVariable["cashMoney",0]];

На:

_playerGear = [weapons _character,_magazines,_character getVariable["cashMoney",0], _character getVariable ["dayz_onBack","EMPTY"]];

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Точно упустил этот момент. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Топ!!!

Только как мне его к своему HotKey прикрутить?????

_display = uiNamespace getVariable "GuiHotPic";
_primaryWeapon = primaryWeapon player;
_magazine = magazines player;
_dayz_onBack = player getVariable ["dayz_onBack","EMPTY"];
_backpack = unitBackpack player;
_packtype = (typeOf _backpack);
_bandage = "ItemBandage";
_pic1 = "";
_pic2 = "";
_pic3 = "";
_pic4 = "";
_ctrl1 = _display displayCtrl 101;
_ctrl2 = _display displayCtrl 102;
_ctrl3 = _display displayCtrl 103;
_ctrl4 = _display displayCtrl 104;
if (!isNil "_primaryWeapon") then {_pic1 = gettext(configFile >> 'CfgWeapons' >> _primaryWeapon >> 'picture');};
if (_bandage in _magazine) then {_pic2 = gettext(configFile >> 'CfgMagazines' >> _bandage >> 'picture');};
if (!isNil "_dayz_onBack") then {_pic3 = gettext(configFile >> 'CfgWeapons' >> _dayz_onBack >> 'picture');};
if (!isNil "_backpack") then {_pic4 = gettext(configFile >> 'CfgVehicles' >> _packtype >> 'picture');};
_ctrl1 ctrlSetText _pic1;
_ctrl2 ctrlSetText _pic2;
_ctrl3 ctrlSetText _pic3;
_ctrl4 ctrlSetText _pic4;

 

Вот, только к своему прикрути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал всё по инструкции работает, но пропадает инвентарь с трупа  в руках остаётся лишь основное оружие которое держал  и в добавок тело не прячется) 

Изменено пользователем Валерий (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Валерий сказал:

Сделал всё по инструкции работает, но пропадает инвентарь с трупа  в руках остаётся лишь основное оружие которое держал  и в добавок тело не прячется) 

Потому что не сделали всё по инструкции. Смотрите лог на наличие ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, BigCrazyCat сказал:

Потому что не сделали всё по инструкции. Смотрите лог на наличие ошибок.

Значит что то вы упустили , файл player_death только в compiles подключается или его ещё надо в AH подключать?) Потому что  камера  смерти которая прописывается в этом же файле якобы простая в установке, работает не должным образом слишком быстро отдаляет в небо!) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 08.02.2017 в 18:24, BigCrazyCat сказал:

 

Привет такая проблема после смерти оружие проподает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Валерий сказал:

Значит что то вы упустили , файл player_death только в compiles подключается или его ещё надо в AH подключать?) Потому что  камера  смерти которая прописывается в этом же файле якобы простая в установке, работает не должным образом слишком быстро отдаляет в небо!) 

Возможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, BigCrazyCat сказал:

Возможно.

Сам то что думаешь?)

Изменено пользователем Валерий (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Валерий сказал:

Спасибо вы так помогли)

Для вас сделали целый гайд с подробными обьяснениями, а вы ещё остались недовольными. Типичный русский пользователь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, BigCrazyCat сказал:

Для вас сделали целый гайд с подробными обьяснениями, а вы ещё остались недовольными. Типичный русский пользователь.

Извиняюсь если я таким вам показался) попробую сделать на чистую сборку!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Валерий сказал:

Извиняюсь если я таким вам показался) попробую сделать на чистую сборку!

Я устанавливал по гайду на чистой сборке, но со своим Инфи. Так что да, найти строку в AH.sqf стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 24.02.2017 в 18:42, BigCrazyCat сказал:

Я устанавливал по гайду на чистой сборке, но со своим Инфи. Так что да, найти строку в AH.sqf стоит.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Установил все по гайду. Когда вынимаешь оружие аз-за спины оно пропадает. Что не так сделал подскажите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 часов назад, guyfromgarlem сказал:

в настройках инфистара  _RAI =  false;

За что отвечает этот конфиг?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

удаляет добавленный предмет из инвенторя))) 

/*  Remove "itemsAdded"   */ _RAI =  false;    /* true or false */    /* might remove items from a custom crafting system.. */

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • Автор: 123new
      Вижу крайне много любопытных вопросов по поводу идентификаторов игрока в игре. Что же, разжую для не знающих немного.
       
      В игре есть следующие типы идентификаторов:
      1. Steam64ID идентификатор профиля игрока (на пиратках его UID называют), примерно такой: 765475....65 (17 цифр).
      2. Так называемый мною, BIS ID - uid из окна (консоли) сервера игры и ADM-файлов логов сервера, который пишется самой игрой
      3. Battleye GUID игрока.
       
      Первый идентификатор (Steam64ID) на ПК является прямым идентификатором стим-профиля игрока, уникальным у каждого игрока. Т.е. публичным идентификатором вашего профиля для большинства стим-игр (например, Counter-Strike).
      Второй идентификатор (BIS ID) является определенной хеш-суммой, полученной из Steam64ID посредством конвертации сначала в sha256, а затем в base64. Спасибо за это разъяснение и пример кода-конвертации авторам игры на своем официальном форуме.
      Третий идентификатор (Battleye GUID) является публичным идентификатором Battleye античита, получаемый также из Steam64ID поcредством получения его хеш-суммы MD5. Этот же идентификатор есть в логах сервера от Battleye, в любых RCON-приложениях (DART, BEC и т.п.), также его можно конвертировать самим.
       
      Так вот, как же получить Steam64ID:
      1. Зайти на любой ресурс, предназначенный для сбора таких данных. например на: https://steamid.io/
      2. Ввести ссылку на ваш стим-профиль
      3. Получить результат из кучи данных, одно поле из которых и будет содержать ваш Steam64ID
       
      Как получить BIS ID:
      1. Открыть любой Phyton v2.7 -конвертер в интернете, например: https://onecompiler.com/python2/3ycz55xew
      2. Ввести в него следующий код:
      # Hello World program in Python from hashlib import sha256 from base64 import b64encode def construct_bi_uid(steam_id): hashed = sha256() hashed.update(str(steam_id)) return b64encode(hashed.digest()) print construct_bi_uid(76514925976798981) 3. заменить 76514925976798981 на ваш Steam64ID
      4. Отправить код в исполнение, нажав Execute.
      5. Получить результат
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      [Альтернатива] Метод на основе PHP:
      <?php /** * This is how you get user id (bohemia id) like you see in .ADM files from steam id. */ $steam_id = "76514925976798981"; $user_id = base64url_encode(hash('sha256', $steam_id, true)); function base64url_encode($data) { $b64 = base64_encode($data); if ($b64 === false) { return false; } $url = strtr($b64, '+/', '-_'); return $url; } echo $user_id; [Альтернатива] Метод для javascript - node.js:
      var crypto = require('crypto'); var body = "76514925976798981"; var hash = crypto.createHash("sha256"); var hash_result = hash.update(body, 'utf8').digest('base64'); console.log(hash_result);  
      Как получить Battleye GUID:
      1. Открыть любой ресурс с готовой формой конвертирования, например:
      https://armstalker.com/guid/
      https://dayzrussia.com/f/index.php?pages/dayzguid/
      либо написать свою, на основе данных, предложенных на странице Github
      https://gist.github.com/chris579/53053b6d6438df9a9718c23c0d6bbd69
      Оставлю ниже код для Phyton:
      # Thanks to gunlinux import md5 steamid=76514925976798981 temp = "" for i in range(8): temp += chr((steamid & 0xFF)) steamid >>= 8 m = md5.new("BE"+temp) print m.hexdigest() Код для PHP:
      var crypto = require('crypto'); var body = "76514925976798981"; var hash = crypto.createHash("sha256"); var hash_result = hash.update(body, 'utf8').digest('base64'); console.log(hash_result); '2. Вставить в поле ввода UID(Steam64ID) ваш Steam64ID
      3. Нажать кнопку конвертирования или исполнить код, и получить в готовом виде Battleye GUID
       
      Возможно имеются и другие методы и наработки в получении данных идентификаторов более простыми методами, на других языках, либо автоматически. Я описал лишь известные мне.
      Все желающие могут добавить в комментариях свои способы конвертаций, возможно это поможет кому-либо.
    • Автор: 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Наш выбор

×
×
  • Создать...

Важная информация

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