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

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

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

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

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

История изменений

Здесь нет истории для отображения или этот комментарий был изменён модератором

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

    • Автор: Tamirlan
      Народ помогите! У меня проблема! В один момент все персонажи (игроки), когда залетают на остров одеты не в свою одежду и у всех в рюкзаках пустые пластиковые бутылки! не знаю вообще как это исправить! SOS! Есть подозрение что что то произошло с базой данных! но не уверен! Может кто сталкивался с такой проблемой? Как решали... не будьте равнодушными пожалуйста помогите... (началось с того что один из игроков покупал пластиковые бутылки и не заметил что купил слишком много что у него они стали вываливаться и появляться на земле (в рюкзаке место закончилось)) в момент покупки бутылок говорит что что то на секунду подвисло и после этого все кто залетает в игру стали появляться в его одежде и с бутылками. Это было вчера. Сегодня кто то купил одежду сантаклауса и теперь все появляются в одежде санты. Причем если корректно  выйти из миссии и после зайти на последнюю точку подключения все ок. А если выбрать любой город то все как я описывал выше. Плиз помогите решить этот полтергейст!) 
    • Автор: DrTauren
      Собственно, некоторым не нравится стандартный Statusbar, кому-то он не нужен, а кто-то хочет установить свой statusbar, для этого вам пригодится данная статья. Итак, как убрать стандартный statusbar в Altis Life:

      1) Открываем description.ext и комментируем, либо удаляем эту строку:
      #include "dialog\hud_stats.hpp" то есть должно получиться так (если кто не понял ):
       

      2) Открываем файл core\functions\fn_hudSetup.sqf и комментируем эти строки:
      disableSerialization; cutRsc ["playerHUD", "PLAIN", 2, false]; [] call life_fnc_hudUpdate; [] spawn {     private["_dam"];     for "_i" from 0 to 1 step 0 do {         _dam = damage player;         waitUntil {(damage player) != _dam};         [] call life_fnc_hudUpdate;     }; }; Результат:

      3) Открываем файл core\functions\fn_hudUpdate.sqf и комментируем эти строки:
      disableSerialization; if (isNull LIFEdisplay) then {[] call life_fnc_hudSetup;}; LIFEctrl(2200) progressSetPosition (life_hunger / 100); LIFEctrl(2201) progressSetPosition (1 - (damage player)); LIFEctrl(2202) progressSetPosition (life_thirst / 100); Примеры того как это должно выглядеть есть выше, не буду повторяться. 
      Вот собственно и всё 
    • Автор: DrTauren
      На сколько я знаю, есть другой скрипт для создания системы крафта на сервер Altis Life, но данная статья позволит сделать это в разы проще. Без необходимости изменять кучу всего.
       
      Установка:
      1) Идём в папку core и создаем в ней папку craft. Затем в ней создаём файлы fn_craft.sqf, fn_craft_update.sqf, fn_craft_updateFilter.sqf, fn_craftAction.sqf и fn_craftCfg.sqf
      2) В файл fn_craft.sqf вставляем этот код:
      private["_dialog","_inv","_itemInfo","_filter"]; //Declare all private variables if(!dialog) then { //Verify if the window is open  createDialog "Life_craft"; }; disableSerialization; //Disable Serialization if(life_is_processing) exitWith{  closeDialog 2001;  closeDialog 0; }; _dialog = findDisplay 666; //find the craft dialog/window _inv = _dialog displayCtrl 669; //find the listbox of items can be created lbClear _inv; //clear the listbox _filter = _dialog displayCtrl 673; _filter lbAdd localize "STR_CRAFT_FILTER_Weapon"; _filter lbSetData[(lbSize _filter)-1,"weapon"]; _filter lbAdd localize "STR_CRAFT_FILTER_Uniform"; _filter lbSetData[(lbSize _filter)-1,"uniform"]; _filter lbAdd localize "STR_CRAFT_FILTER_Backpack"; _filter lbSetData[(lbSize _filter)-1,"backpack"]; _filter lbAdd localize "STR_CRAFT_FILTER_Item"; _filter lbSetData[(lbSize _filter)-1,"item"]; _filter lbSetCurSel 0; 3) В файл fn_craft_update.sqf вставляем это:
      #include "..\..\script_macros.hpp" private["_dialog","_inv","_mats","_item","_struct","_str","_invSize","_matsNeed","_matsNum","_config","_itemFilter"]; //Declare all private variables disableSerialization; //Disable Serialization _dialog = findDisplay 666; //find the craft dialog/window _inv = _dialog displayCtrl 669; //find the listbox of items can be created _mats = _dialog displayCtrl 672; _struct = ""; if ((lbCurSel 669) == -1) exitWith {hint localize "STR_ISTR_SelectItemFirst";}; _item = lbData[669,(lbCurSel 669)]; _itemFilter = lbData[673,(lbCurSel 673)]; _config = [_itemFilter] call life_fnc_craftCfg; {  if (_item == _x select 0) then {  _matsNeed = _x select 1;  _invSize = count _matsNeed;  for [{_i = 0},{_i < _invSize - 1},{_i = _i + 2}] do {  _str = M_CONFIG(getText,"VirtualItems",(_matsNeed select _i),"displayName");  _matsNum = _matsNeed select _i+1;  _struct = _struct + format["%1x %2<br/>",_matsNum,(localize _str)];  };  }; } foreach (_config); if (_struct == "") then {  _struct = "Es wird nichts benötigt"; }; _mats ctrlSetStructuredText parseText format[" <t size='0.8px'> %1 </t> ",_struct]; 4) В fn_craft_updateFilter.sqf:
      #include "..\..\script_macros.hpp" disableSerialization; private["_list","_filter","_dialog","_inv","_mats","_filterBox","_item","_itemFilter"]; _dialog = findDisplay 666; //find the craft dialog/window _inv = _dialog displayCtrl 669; //find the listbox of items can be created _mats = _dialog displayCtrl 672; _filterBox = _dialog displayCtrl 673; _itemFilter = lbData[673,(lbCurSel 673)]; lbClear _inv; _struct = ""; _config = [_itemFilter] call life_fnc_craftCfg; {     if(_itemFilter == "item") then{         _str = localize M_CONFIG(getText,"VirtualItems",(_x select 0),"displayName");         _inv lbAdd format["%1",_str]; //add a gun to the listbox         _inv lbSetData[(lbSize _inv)-1,_x select 0]; //set the data of the gun         } else {             _itemInfo = [_x select 0] call life_fnc_fetchCfgDetails;             _inv lbAdd format["%1",_itemInfo select 1]; //add a gun to the listbox             _inv lbSetData[(lbSize _inv)-1,_itemInfo select 0]; //set the data of the gun             _inv lbSetPicture[(lbSize _inv)-1,_itemInfo select 2];         }; } foreach (_config); _inv lbSetCurSel 0; _item = lbData[669,(lbCurSel 669)]; _config = [_itemFilter] call life_fnc_craftCfg; {     if(_item == _x select 0)then {         _matsNeed = _x select 1;         _invSize = count _matsNeed;         for [{_i = 0},{_i < _invSize - 1},{_i = _i + 2}] do {             _str = M_CONFIG(getText,"VirtualItems",(_matsNeed select _i),"displayName");             _matsNum = _matsNeed select _i+1;             _struct = _struct + format["%1x %2<br/>",_matsNum,(localize _str)];         };     }; } foreach (_config); _mats ctrlSetStructuredText parseText format[" <t size='0.8px'> %1 </t> ",_struct]; 5) В fn_craftAction.sqf:
      #include "..\..\script_macros.hpp" private["_dialog","_item","_itemInfo","_oldItem","_newItem","_upp","_itemName","_ui","_progress","_pgText","_cP","_allMaterial","_matsNeed","_invSize","_handledItem","_itemFilter","_backpackOldItems","_weight","_weightUsedItems"]; disableSerialization; _dialog = findDisplay 666; if((lbCurSel 669) isEqualTo -1) xitWith {hint localize "STR_ISTR_SelectItemFirst";}; _item = lbData[669,(lbCurSel 669)]; _allaterial = true; _itemFilter = lbData[673,(lbCurSel 673)]; _matsNeed = 0; _config = [_itemFilter] call life_fnc_craftCfg; life_action_inUse = true;//Lock out other actions during processing. {     if (_item isEqualTo (_x select 0))then {         _matsNeed = _x select 1;         _invSize = count _matsNeed;         for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {             _matsNum = _matsNeed select _i+1;             if ((ITEM_VALUE(_matsNeed select _i)) < _matsNum) then {_allMaterial = false;};         };     }; } foreach (_config); _newItem = _item; diag_log format ["%1",allMaterial]; if (!_allMaterial) exitWith {hint localize "STR_PM_NoMaterial"; life_action_inUse = false;}; //Some checks if ((count _matsNeed) isEqualTo 0) exitWith {life_action_inUse = false;}; if (_itemFilter isEqualTo "backpack" && backpack player != "") exitWith {     //hint localize "STR_CRAFT_AR_Backpack";     hint "Remove your backpack before making a new one.";     life_action_inUse = false; }; if (_itemFilter isEqualTo "uniform" && uniform player != "") exitWith {     //hint localize "STR_CRAFT_AR_Uniform";     hint "Remove your uniform before making a new one.";     life_action_inUse = false; }; if (_itemFilter isEqualTo "weapon") then {     if (!(player canAdd _newItem) || currentWeapon player != "") exitWith {         hint localize "STR_NOTF_NoRoom";         life_action_inUse = false;     }; }; if (_itemFilter isEqualTo "item") then {     _weight = [_item] call life_fnc_itemWeight;     _weightUsedItems = 0;     for [{_i=0},{_i<(count _matsNeed)-1},{_i=_i+2}] do {         _matsNum = _matsNeed select _i+1;         _weightUsedItems = _weightUsedItems + (([(_matsNeed select _i)] call life_fnc_itemWeight) * _matsNum);         diag_log format ["%1 - %2",(_matsNeed select _i),_weightUsedItems];     }     if ((life_carryWeight - _weightUsedItems + _weight) > life_maxWeight) exitWith {         hint localize "STR_NOTF_NoRoom";         life_action_inUse = false;     }; }; _oldItem = _matsNeed; if (_itemFilter isEqualTo "item") then {     _itemName = localize M_CONFIG(getText,"VirtualItems",_newItem,"displayName"); } else {  _itemInfo = [_newItem] call life_fnc_fetchCfgDetails;  _itemName = _itemInfo select 1; }; life_is_processing = true; _upp = format["Crafting %1",_itemName]; closeDialog 0; //Setup our progress bar. disableSerialization; 5 cutRsc ["life_progress","PLAIN"]; _ui = uiNamespae getVariable "life_progress"; _progress = _ui displayCtrl 38201; _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format["%2 (1%1)...","%",_upp]; _progress progressSetPosition 0.01; _cP = 0.01; _removeItemSuccess = true; _invSize = count _oldItem; for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {     _handledItem = (_oldItem select _i);     if(!([false,_handledItem,_oldItem select _i+1] call life_fnc_handleInv)) exitWith {_removeItemSuccess = false;}; }; if (!_removeItemSuccess) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; for "_i" from 0 to 1 step 0 do {  sleep 0.3;  _cP = _cP + 0.01;  _progress progressSetPosition _cP;  _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];  if(_cP >= 1) exitWith {}; }; if (_itemFilter isEqualTo "backpack") then {  if(backpack player isEqualTo "") then {  player addBackpack _newItem;  } else {  hint localize "STR_CRAFT_AR_Backpack";  life_is_processing = false;  life_action_inUse = false;  }; }; if (_itemFilter isEqualTo "uniform") then{  if(uniform player isEqualTo "") then{  player addUniform _newItem;  } else {  hint localize "STR_CRAFT_AR_Uniform";  life_is_processing = false;  life_action_inUse = false;  }; }; if (_itemFilter isEqualTo "weapon") then{  if(player canAdd _newItem) then{  player addIem _newItem;  } else {  if(currentWeapon player isEqualTo "") then{  player addWeapon _newItem;  } else {  5 cutText ["","PLAIN"];  for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {  _handledItem = (_oldItem select _i);  [true,_handledItem,_oldItem select _i+1] call life_fnc_handleInv;  };  life_is_processing = false;  life_action_inUse = false;  };  }; }; if (_itemFilter isEqualTo "item") then{  _handledItem = _newItem;  [true,_handledItem,1] call life_fnc_handleInv; }; 5 cutText ["","PLAIN"]; titleText[format[localize "STR_CRAFT_Process",_itemName],"PLAIN"]; [0] call SOCK_fnc_updatePartial; life_is_processing = false; life_action_inUse = false; 6) В fn_craftCfg.sqf:
      #include "..\..\script_macros.hpp" private["_craft","_return"]; _craft = param [0,"",[""]]; if(_craft == "") exitWith {closeDialog 0}; //Bad shop type passed. switch(_craft) do {     case "weapon": {         _return = [             //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]             ["hgun_Pistol_01_F", ["diamond_cut",2,"copper_refined",1]],             ["SMG_01_F", ["gunbarrel",2,"copper_refined",5,"cloth",3,"diamond_uncut",2]],             ["SMG_05_F", ["gunbarrel",1,"cloth",2,"copper_refined",4,"diamond_uncut",1]],             ["hgun_PDW2000_F", ["gunbarrel",1,"cloth",1,"copper_refined",3]],             ["optic_Aco", ["diamond_cut",2,"glass",2,"iron_refined",1]],             ["optic_ACO_grn", ["diamond_cut",2,"glass",2,"iron_refined",1]],             ["optic_Holosight", ["diamond_cut",3,"glass",3,"iron_refined",2]]         ];     };     case "uniform": {         _return = [             //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]             ["U_BG_leader", ["diamond_cut",5,"cloth",5,"iron_refined",8]]         ];     };     case "backpack": {         _return = [             //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]             ["B_Carryall_mcamo", ["diamond_cut",1,"cloth",4,"kevlar",2]]         ];     };     case "item": {         _return = [             //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]             ["spikeStrip", ["copper_refined",2]],             ["lockpick", ["copper_refined",1]]         ];     }; }; _return; 7) Открываем файл functions.hpp и добавляем туда:
      class Crafting {         file = "core\craft";         class craft {};         class craftAction {};         class craftCfg {};         class craft_update {};         class craft_updateFilter {};     }; 8) Открываем stringtable.xml и добавляем это:
          <Package name="Craft">           <Key ID="STR_CRAFT_Title">               <Original>Crafting Menu</Original>           </Key>           <Key ID="STR_PM_CraftStats">               <Original>Object to craft</Original>           </Key>           <Key ID="STR_PM_CraftMaterials">               <Original>Materials needed</Original>           </Key>           <Key ID="STR_CRAFT_Button">               <Original>Craft</Original>           </Key>           <Key ID="STR_PM_NoMaterial">               <Original>You do not have all the required materials</Original>           </Key>           <Key ID="STR_CRAFT_Process">               <Original>You have crafted: %1</Original>           </Key>         <Key ID="STR_CRAFT_FILTER_Weapon">               <Original>Weapons</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_PWeapon">               <Original>Prim. Weapons</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_HWeapon">               <Original>Sec. Weapons</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_Ammo">               <Original>Ammos</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_Uniform">               <Original>Uniforms</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_Vest">               <Original>Vests</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_Backpack">               <Original>Backpacks</Original>           </Key>           <Key ID="STR_CRAFT_FILTER_Item">               <Original>Items</Original>           </Key>           <Key ID="STR_CRAFT_AR_Question">               <Original>Would you like to equip this item?</Original>           </Key>           <Key ID="STR_CRAFT_AR_Backpack">               <Original>If you chose yes your current backpack will be deleted and replaced by the new one else it will spawn on the ground</Original>           </Key>           <Key ID="STR_CRAFT_AR_PWeapon">               <Original>If you chose yes your prim. weapon will be deleted and replaced by the new one else it will spawn on the ground</Original>           </Key>           <Key ID="STR_CRAFT_AR_HWeapon">               <Original>If you chose yes your sec. weapon will be deleted and replaced by the new one else it will spawn on the ground</Original>           </Key>           <Key ID="STR_CRAFT_AR_Uniform">               <Original>If you chose yes your current uniform will be deleted and replaced by the new one else it will spawn on the ground</Original>           </Key>           <Key ID="STR_CRAFT_AR_Vest">               <Original>If you chose yes your current vest will be deleted and replaced by the new one else it will spawn on the ground</Original>           </Key>     </Package> 9) Переходим в папку dialog и создаём там файл craft.hpp со следующим содержимым:
      class Life_craft {     idd = 666;     name= "life_craft";     movingEnable = false;     enableSimulation = true;     onLoad = "[] spawn life_fnc_craft";     class controlsBackground {         class Life_RscTitleBackground:Life_RscText {             colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};             idc = -1;             x = 0.1;             y = 0.2;             w = 0.8;             h = (1 / 25);         };         class MainBackground:Life_RscText {             colorBackground[] = {0, 0, 0, 0.7};             idc = -1;             x = 0.1;             y = 0.2 + (11 / 250);             w = 0.8;             h = 0.6 - (22 / 250);         };     };     class controls {         class Title : Life_RscTitle {             colorBackground[] = {0, 0, 0, 0};             idc = 667;             text = "$STR_CRAFT_Title";             x = 0.1;             y = 0.2;             w = 0.6;             h = (1 / 25);         };         class craftListHeader : Life_RscText         {             idc = 668;             colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};             text = "$STR_PM_CraftStats";             sizeEx = 0.04;             x = 0.105; y = 0.26;             w = 0.275; h = 0.04;         };         //Craft list         class craftList : life_RscListBox         {             idc = 669;             sizeEx = 0.030;             onLBSelChanged = "[] spawn life_fnc_craft_update";             x = 0.105;             y = 0.31;             w = 0.275; h = 0.44;         };         //Materials list header         class materialListHeader : Life_RscText         {             idc = 670;             colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};             text = "$STR_PM_CraftMaterials";             sizeEx = 0.04;             x = 0.395; y = 0.26;             w = 0.275; h = 0.04;         };         //Materials list         class materialList : Life_RscControlsGroup         {             idc = 671;             w = 0.275;             h = 0.44;             x = 0.395;             y = 0.30;             class Controls             {                 class mats : Life_RscStructuredText                 {                     idc = 672;                     sizeEx = 0.020;                     text = "";                     x = 0;                     y = 0;                     w = 0.27; h = 0.44;                 };             };         };         //FILTER         class FilterList : Life_RscCombo         {             idc = 673;             colorBackground[] = {0,0,0,0.7};             onLBSelChanged  = "[] call life_fnc_craft_updateFilter";             x = 0.69;             y = 0.32;             w = (6.25 / 30);             h = (1 / 25);         };         //Craft button         class ButtonCraft : Life_RscButtonMenu {             idc = 674;             text = "$STR_CRAFT_Button";             colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5};             onButtonClick = "if(!life_is_processing) then {[] spawn life_fnc_craftAction};";             x = 0.69;             y = 0.26;             w = (6.25 / 40);             h = (1 / 25);         };         class CloseButtonKey : Life_RscButtonMenu {             idc = -1;             text = "$STR_Global_Close";             onButtonClick = "closeDialog 0;";             x = 0.1;             y = 0.8 - (1 / 25);             w = (6.25 / 40);             h = (1 / 25);         };     }; };  10) Открываем файл Masterhandler.hpp и добавляем туда:
      #include "craft.hpp" 11) В папке dialogs открываем player_inv.hpp и добавляем код:
              class ButtonCrafting: Life_RscButtonMenu {             idc = 2025;             text = "Crafting";             onButtonClick = "createDialog ""Life_craft"";";             x = 0.1 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH));             y = 0.805;             w = (6.25 / 40);             h = (1 / 25);         };  
       
      Оригинал на английском:
      https://www.altisliferpg.com/topic/3964-tutorial-crafting-system/  
  • Наш выбор

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

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

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