Jump to content

【Course】Manufacturing goods, guns, etc..


hjyydkl122

Recommended Posts

Author Name: EdgeKiller

Credits To: B4v4r!4n_Str!k3r & sebi1106

Original Post: Link Here

 

step 1:
opens the file and add the following / functions.hpp there under the "class action".

class craftAction {};

and the following under the "class player _ menu":

  1. class craft {};
  2. class craft_update {};
  3. class craft_updateFilter {};

and the following under the "class config.

class craftCfg {};

step 2:
opens the file / dialogue / masterhandler.h and adds to it the following:

#include "craft.hpp"

step 3:
opens the file / dialogue / player _ inv.hpp and adds the following there under "class controls".

  1. class ButtonCraft : Life_RscButtonMenu {
  2. idc = 2025;
  3. text = "$STR_PM_Craft";
  4. onButtonClick = "closeDialog 0; createDialog ""Life_craft"";";
  5. x = 0.42 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH));
  6. y = 0.805;
  7. w = (6.25 / 40);
  8. h = (1 / 25);
  9. };

 

step 4:
opens the file / stringtable.xml and adds that:

  1. <Package name="Craft">
  2. <Key ID="STR_CRAFT_Title">
  3. <Original>Baumenü</Original>
  4. </Key>
  5. <Key ID="STR_PM_CraftStats">
  6. <Original>Sachen zum Bauen</Original>
  7. </Key>
  8. <Key ID="STR_PM_CraftMaterials">
  9. <Original>Benötigte Sachen</Original>
  10. </Key>
  11. <Key ID="STR_CRAFT_Button">
  12. <Original>Bauen!</Original>
  13. </Key>
  14. <Key ID="STR_PM_NoMaterial">
  15. <Original>Du hast nicht alle Baumaterialen!</Original>
  16. </Key>
  17. <Key ID="STR_CRAFT_Process">
  18. <Original>Du hast folgendes hergestellt: %1</Original>
  19. </Key>
  20. <Key ID="STR_CRAFT_FILTER_Weapon">
  21. <Original>Waffen</Original>
  22. </Key>
  23. <Key ID="STR_CRAFT_FILTER_Uniform">
  24. <Original>Kleidung</Original>
  25. </Key>
  26. <Key ID="STR_CRAFT_FILTER_Backpack">
  27. <Original>Rucksäcke</Original>
  28. </Key>
  29. <Key ID="STR_CRAFT_FILTER_Item">
  30. <Original>Items</Original>
  31. </Key>
  32. <Key ID="STR_CRAFT_AR_Backpack">
  33. <Original>Du hast bereit einen Rucksack! Pack den alten erstmal weg.</Original>
  34. </Key>
  35. <Key ID="STR_CRAFT_AR_Uniform">
  36. <Original>Du hast bereits etwas an! Mach dich nackt und versuch es nochmal.</Original>
  37. </Key>
  38. </Package>

and the package, the player _ menu ":

  1. <Key ID="STR_PM_Craft">
  2. <Original>Craften</Original>
  3. </Key>

 

creates the file and adds it to craft.hpp / dialogue.

  1. /*
  2. File: craft.hpp
  3. Description: Crafting System
  4. Created by EdgeKiller
  5. Coder: EdgeKiller
  6. */
  7. class Life_craft {
  8. idd = 666;
  9. name= "life_craft";
  10. movingEnable = false;
  11. enableSimulation = true;
  12. onLoad = "[] spawn life_fnc_craft";
  13. class controlsBackground {
  14. class Life_RscTitleBackground:Life_RscText {
  15. 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])"};
  16. idc = -1;
  17. x = 0.1;
  18. y = 0.2;
  19. w = 0.8;
  20. h = (1 / 25);
  21. };
  22. class MainBackground:Life_RscText {
  23. colorBackground[] = {0, 0, 0, 0.7};
  24. idc = -1;
  25. x = 0.1;
  26. y = 0.2 + (11 / 250);
  27. w = 0.8;
  28. h = 0.6 - (22 / 250);
  29. };
  30. };
  31. class controls {
  32. class Title : Life_RscTitle {
  33. colorBackground[] = {0, 0, 0, 0};
  34. idc = 667;
  35. text = "$STR_CRAFT_Title";
  36. x = 0.1;
  37. y = 0.2;
  38. w = 0.6;
  39. h = (1 / 25);
  40. };
  41. class craftListHeader : Life_RscText {
  42. idc = 668;
  43. 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};
  44. text = "$STR_PM_CraftStats";
  45. sizeEx = 0.04;
  46. x = 0.105; y = 0.26;
  47. w = 0.275; h = 0.04;
  48. };
  49. //Craft list
  50. class craftList : life_RscListBox {
  51. idc = 669;
  52. sizeEx = 0.030;
  53. onLBSelChanged = "[] spawn life_fnc_craft_update";
  54. x = 0.105;
  55. y = 0.31;
  56. w = 0.275; h = 0.44;
  57. };
  58. //Materials list header
  59. class materialListHeader : Life_RscText {
  60. idc = 670;
  61. 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};
  62. text = "$STR_PM_CraftMaterials";
  63. sizeEx = 0.04;
  64. x = 0.395; y = 0.26;
  65. w = 0.275; h = 0.04;
  66. };
  67. //Materials list
  68. class materialList : Life_RscControlsGroup {
  69. idc = 671;
  70. w = 0.275;
  71. h = 0.44;
  72. x = 0.395;
  73. y = 0.30;
  74. class Controls {
  75. class mats : Life_RscStructuredText {
  76. idc = 672;
  77. sizeEx = 0.020;
  78. text = "";
  79. x = 0;
  80. y = 0;
  81. w = 0.27; h = 0.44;
  82. };
  83. };
  84. };
  85. //FILTER
  86. class FilterList : Life_RscCombo {
  87. idc = 673;
  88. colorBackground[] = {0,0,0,0.7};
  89. onLBSelChanged = "[] call life_fnc_craft_updateFilter";
  90. x = 0.69;
  91. y = 0.32;
  92. w = (6.25 / 30);
  93. h = (1 / 25);
  94. };
  95. //Craft button
  96. class ButtonCraft : Life_RscButtonMenu {
  97. idc = 674;
  98. text = "$STR_CRAFT_Button";
  99. 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};
  100. onButtonClick = "if(!(life_is_processing && life_action_inUse)) then {[] spawn life_fnc_craftAction};";
  101. x = 0.69;
  102. y = 0.26;
  103. w = (6.25 / 40);
  104. h = (1 / 25);
  105. };
  106. class CloseButtonKey : Life_RscButtonMenu {
  107. idc = -1;
  108. text = "$STR_Global_Close";
  109. onButtonClick = "closeDialog 0;";
  110. x = 0.1;
  111. y = 0.8 - (1 / 25);
  112. w = (6.25 / 40);
  113. h = (1 / 25);
  114. };
  115. };
  116. };

 

step 5:
creates the file and adds it to craft.hpp / dialogue.

  1. /*
  2. File: craft.hpp
  3. Description: Crafting System
  4. Created by EdgeKiller
  5. Coder: EdgeKiller
  6. */
  7. class Life_craft {
  8. idd = 666;
  9. name= "life_craft";
  10. movingEnable = false;
  11. enableSimulation = true;
  12. onLoad = "[] spawn life_fnc_craft";
  13. class controlsBackground {
  14. class Life_RscTitleBackground:Life_RscText {
  15. 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])"};
  16. idc = -1;
  17. x = 0.1;
  18. y = 0.2;
  19. w = 0.8;
  20. h = (1 / 25);
  21. };
  22. class MainBackground:Life_RscText {
  23. colorBackground[] = {0, 0, 0, 0.7};
  24. idc = -1;
  25. x = 0.1;
  26. y = 0.2 + (11 / 250);
  27. w = 0.8;
  28. h = 0.6 - (22 / 250);
  29. };
  30. };
  31. class controls {
  32. class Title : Life_RscTitle {
  33. colorBackground[] = {0, 0, 0, 0};
  34. idc = 667;
  35. text = "$STR_CRAFT_Title";
  36. x = 0.1;
  37. y = 0.2;
  38. w = 0.6;
  39. h = (1 / 25);
  40. };
  41. class craftListHeader : Life_RscText {
  42. idc = 668;
  43. 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};
  44. text = "$STR_PM_CraftStats";
  45. sizeEx = 0.04;
  46. x = 0.105; y = 0.26;
  47. w = 0.275; h = 0.04;
  48. };
  49. //Craft list
  50. class craftList : life_RscListBox {
  51. idc = 669;
  52. sizeEx = 0.030;
  53. onLBSelChanged = "[] spawn life_fnc_craft_update";
  54. x = 0.105;
  55. y = 0.31;
  56. w = 0.275; h = 0.44;
  57. };
  58. //Materials list header
  59. class materialListHeader : Life_RscText {
  60. idc = 670;
  61. 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};
  62. text = "$STR_PM_CraftMaterials";
  63. sizeEx = 0.04;
  64. x = 0.395; y = 0.26;
  65. w = 0.275; h = 0.04;
  66. };
  67. //Materials list
  68. class materialList : Life_RscControlsGroup {
  69. idc = 671;
  70. w = 0.275;
  71. h = 0.44;
  72. x = 0.395;
  73. y = 0.30;
  74. class Controls {
  75. class mats : Life_RscStructuredText {
  76. idc = 672;
  77. sizeEx = 0.020;
  78. text = "";
  79. x = 0;
  80. y = 0;
  81. w = 0.27; h = 0.44;
  82. };
  83. };
  84. };
  85. //FILTER
  86. class FilterList : Life_RscCombo {
  87. idc = 673;
  88. colorBackground[] = {0,0,0,0.7};
  89. onLBSelChanged = "[] call life_fnc_craft_updateFilter";
  90. x = 0.69;
  91. y = 0.32;
  92. w = (6.25 / 30);
  93. h = (1 / 25);
  94. };
  95. //Craft button
  96. class ButtonCraft : Life_RscButtonMenu {
  97. idc = 674;
  98. text = "$STR_CRAFT_Button";
  99. 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};
  100. onButtonClick = "if(!(life_is_processing && life_action_inUse)) then {[] spawn life_fnc_craftAction};";
  101. x = 0.69;
  102. y = 0.26;
  103. w = (6.25 / 40);
  104. h = (1 / 25);
  105. };
  106. class CloseButtonKey : Life_RscButtonMenu {
  107. idc = -1;
  108. text = "$STR_Global_Close";
  109. onButtonClick = "closeDialog 0;";
  110. x = 0.1;
  111. y = 0.8 - (1 / 25);
  112. w = (6.25 / 40);
  113. h = (1 / 25);
  114. };
  115. };
  116. };

step 6:
creates the file fn _ craftaction.sqf and adds it in / core / actions.

  1. #include "..\..\script_macros.hpp"
  2. /*
  3. File: fn_craftAction.sqf
  4. Author: EdgeKiller
  5. Description:
  6. Master handling for crafting an item.
  7. */
  8. private["_dialog","_item","_itemInfo","_oldItem","_newItem","_upp","_itemName","_ui","_progress","_pgText","_cP","_allMaterial","_matsNeed","_invSize","_handledItem","_itemFilter","_backpackOldItems","_weight","_weightUsedItems"];
  9. disableSerialization;
  10. _dialog = findDisplay 666;
  11. if((lbCurSel 669) == -1) exitWith {hint localize "STR_ISTR_SelectItemFirst";};
  12. _item = lbData[669,(lbCurSel 669)];
  13. _allMaterial = true;
  14. _itemFilter = lbData[673,(lbCurSel 673)];
  15. _matsNeed = 0;
  16. _config = [_itemFilter] call life_fnc_craftCfg;
  17.  
  18. life_action_inUse = true;//Lock out other actions during processing.
  19.  
  20. {
  21. if (_item == _x select 0)then {
  22. _matsNeed = _x select 1;
  23. _invSize = count _matsNeed;
  24. for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {
  25. _matsNum = _matsNeed select _i+1;
  26. if ((ITEM_VALUE(_matsNeed select _i)) < _matsNum) then {_allMaterial = false;};
  27. };
  28. };
  29. } foreach (_config);
  30. _newItem = _item;
  31. diag_log format ["%1",_allMaterial];
  32. if (!_allMaterial) exitWith {hint localize "STR_PM_NoMaterial"; life_action_inUse = false;};
  33. //Some checks
  34. if ((count _matsNeed) == 0) exitWith {life_action_inUse = false;};
  35. if (_itemFilter == "backpack" && backpack player != "") exitWith {
  36. hint localize "STR_CRAFT_AR_Backpack";
  37. life_action_inUse = false;
  38. };
  39. if (_itemFilter == "uniform" && uniform player != "") exitWith {
  40. hint localize "STR_CRAFT_AR_Uniform";
  41. life_action_inUse = false;
  42. };
  43. if (_itemFilter == "weapon") then {
  44. if (!(player canAdd _newItem) || currentWeapon player != "") exitWith {
  45. hint localize "STR_NOTF_NoRoom";
  46. life_action_inUse = false;
  47. };
  48. };
  49. if (_itemFilter == "item") then {
  50. _weight = [_item] call life_fnc_itemWeight;
  51. _weightUsedItems = 0;
  52. for [{_i=0},{_i<(count _matsNeed)-1},{_i=_i+2}] do {
  53. _matsNum = _matsNeed select _i+1;
  54. _weightUsedItems = _weightUsedItems + (([(_matsNeed select _i)] call life_fnc_itemWeight) * _matsNum);
  55. diag_log format ["%1 - %2",(_matsNeed select _i),_weightUsedItems];
  56. };
  57. if ((life_carryWeight - _weightUsedItems + _weight) > life_maxWeight) exitWith {
  58. hint localize "STR_NOTF_NoRoom";
  59. life_action_inUse = false;
  60. };
  61. };
  62. _oldItem = _matsNeed;
  63.  
  64. if (_itemFilter == "item") then {
  65. _itemName = localize M_CONFIG(getText,"VirtualItems",_newItem,"displayName");
  66. } else {
  67. _itemInfo = [_newItem] call life_fnc_fetchCfgDetails;
  68. _itemName = _itemInfo select 1;
  69. };
  70.  
  71. life_is_processing = true;
  72. _upp = format["Baue %1",_itemName];
  73. closeDialog 0;
  74. //Setup our progress bar.
  75. disableSerialization;
  76. 5 cutRsc ["life_progress","PLAIN"];
  77. _ui = uiNameSpace getVariable "life_progress";
  78. _progress = _ui displayCtrl 38201;
  79. _pgText = _ui displayCtrl 38202;
  80. _pgText ctrlSetText format["%2 (1%1)...","%",_upp];
  81. _progress progressSetPosition 0.01;
  82. _cP = 0.01;
  83. _removeItemSuccess = true;
  84. _invSize = count _oldItem;
  85. for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {
  86. _handledItem = (_oldItem select _i);
  87. if(!([false,_handledItem,_oldItem select _i+1] call life_fnc_handleInv)) exitWith {_removeItemSuccess = false;};
  88. };
  89. if (!_removeItemSuccess) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;};
  90.  
  91. for "_i" from 0 to 1 step 0 do {
  92. sleep 0.3;
  93. _cP = _cP + 0.01;
  94. _progress progressSetPosition _cP;
  95. _pgText ctrlSetText format["%3 (%1%2)...",round(_cP * 100),"%",_upp];
  96. if(_cP >= 1) exitWith {};
  97. };
  98. if (_itemFilter == "backpack") then {
  99. if(backpack player == "") then {
  100. player addBackpack _newItem;
  101. } else {
  102. hint localize "STR_CRAFT_AR_Backpack";
  103. life_is_processing = false;
  104. life_action_inUse = false;
  105. };
  106. };
  107. if (_itemFilter == "uniform") then{
  108. if(uniform player == "") then{
  109. player addUniform _newItem;
  110. } else {
  111. hint localize "STR_CRAFT_AR_Uniform";
  112. life_is_processing = false;
  113. life_action_inUse = false;
  114. };
  115. };
  116. if (_itemFilter == "weapon") then{
  117. if(player canAdd _newItem) then{
  118. player addItem _newItem;
  119. } else {
  120. if(currentWeapon player == "") then{
  121. player addWeapon _newItem;
  122. } else {
  123. 5 cutText ["","PLAIN"];
  124. for [{_i=0},{_i<_invSize-1},{_i=_i+2}] do {
  125. _handledItem = (_oldItem select _i);
  126. [true,_handledItem,_oldItem select _i+1] call life_fnc_handleInv;
  127. };
  128. life_is_processing = false;
  129. life_action_inUse = false;
  130. };
  131. };
  132. };
  133. if (_itemFilter == "item") then{
  134. _handledItem = _newItem;
  135. [true,_handledItem,1] call life_fnc_handleInv;
  136. };
  137. 5 cutText ["","PLAIN"];
  138. titleText[format[localize "STR_CRAFT_Process",_itemName],"PLAIN"];
  139. [0] call SOCK_fnc_updatePartial;
  140. life_is_processing = false;
  141. life_action_inUse = false;

step 7:
creates the file fn _ craft.sqf and adds it in / core / pmenu:

  1. /*
  2. File: fn_craft.sqf
  3. Description: Crafting System
  4. Created by EdgeKiller
  5. Coder: EdgeKiller
  6. */
  7. private["_dialog","_inv","_itemInfo","_filter"]; //Declare all private variables
  8. if(!dialog) then { //Verify if the window is open
  9. createDialog "Life_craft";
  10. };
  11. disableSerialization; //Disable Serialization
  12. if(life_is_processing) exitWith{
  13. closeDialog 2001;
  14. closeDialog 0;
  15. };
  16. _dialog = findDisplay 666; //find the craft dialog/window
  17. _inv = _dialog displayCtrl 669; //find the listbox of items can be created
  18. lbClear _inv; //clear the listbox
  19. _filter = _dialog displayCtrl 673;
  20. _filter lbAdd localize "STR_CRAFT_FILTER_Weapon";
  21. _filter lbSetData[(lbSize _filter)-1,"weapon"];
  22. _filter lbAdd localize "STR_CRAFT_FILTER_Uniform";
  23. _filter lbSetData[(lbSize _filter)-1,"uniform"];
  24. _filter lbAdd localize "STR_CRAFT_FILTER_Backpack";
  25. _filter lbSetData[(lbSize _filter)-1,"backpack"];
  26. _filter lbAdd localize "STR_CRAFT_FILTER_Item";
  27. _filter lbSetData[(lbSize _filter)-1,"item"];
  28. _filter lbSetCurSel 0;

step 8:
creates the file fn _ craft _ update.sqf and adds it in / core / pmenu:

  1. #include "..\..\script_macros.hpp"
  2. /*
  3. File: fn_craft_update.sqf
  4. Description: Crafting System
  5. Created by EdgeKiller
  6. Coder: EdgeKiller
  7. */
  8. private["_dialog","_inv","_mats","_item","_struct","_str","_invSize","_matsNeed","_matsNum","_config","_itemFilter"]; //Declare all private variables
  9. disableSerialization; //Disable Serialization
  10. _dialog = findDisplay 666; //find the craft dialog/window
  11. _inv = _dialog displayCtrl 669; //find the listbox of items can be created
  12. _mats = _dialog displayCtrl 672;
  13. _struct = "";
  14. if ((lbCurSel 669) == -1) exitWith {hint localize "STR_ISTR_SelectItemFirst";};
  15. _item = lbData[669,(lbCurSel 669)];
  16. _itemFilter = lbData[673,(lbCurSel 673)];
  17. _config = [_itemFilter] call life_fnc_craftCfg;
  18. {
  19. if (_item == _x select 0) then {
  20. _matsNeed = _x select 1;
  21. _invSize = count _matsNeed;
  22. for [{_i = 0},{_i < _invSize - 1},{_i = _i + 2}] do {
  23. _str = M_CONFIG(getText,"VirtualItems",(_matsNeed select _i),"displayName");
  24. _matsNum = _matsNeed select _i+1;
  25. _struct = _struct + format["%1x %2<br/>",_matsNum,(localize _str)];
  26. };
  27. };
  28. } foreach (_config);
  29. if (_struct == "") then {
  30. _struct = "Es wird nichts benötigt";
  31. };
  32. _mats ctrlSetStructuredText parseText format["
  33. <t size='0.8px'>
  34. %1
  35. </t>
  36. ",_struct];

step 9:
creates the file fn _ craft _ updatefilter.sqf and adds it in / core / pmenu:

  1. #include "..\..\script_macros.hpp"
  2. /*
  3. File: fn_craft_updateFilter.sqf
  4. Description: Crafting System
  5. Created by EdgeKiller
  6. Coder: EdgeKiller
  7. */
  8. disableSerialization;
  9. private["_list","_filter","_dialog","_inv","_mats","_filterBox","_item","_itemFilter"];
  10. _dialog = findDisplay 666; //find the craft dialog/window
  11. _inv = _dialog displayCtrl 669; //find the listbox of items can be created
  12. _mats = _dialog displayCtrl 672;
  13. _filterBox = _dialog displayCtrl 673;
  14. _itemFilter = lbData[673,(lbCurSel 673)];
  15. lbClear _inv;
  16. _struct = "";
  17. _config = [_itemFilter] call life_fnc_craftCfg;
  18. {
  19. if(_itemFilter == "item") then{
  20. _str = localize M_CONFIG(getText,"VirtualItems",(_x select 0),"displayName");
  21. _inv lbAdd format["%1",_str]; //add a gun to the listbox
  22. _inv lbSetData[(lbSize _inv)-1,_x select 0]; //set the data of the gun
  23. } else {
  24. _itemInfo = [_x select 0] call life_fnc_fetchCfgDetails;
  25. _inv lbAdd format["%1",_itemInfo select 1]; //add a gun to the listbox
  26. _inv lbSetData[(lbSize _inv)-1,_itemInfo select 0]; //set the data of the gun
  27. _inv lbSetPicture[(lbSize _inv)-1,_itemInfo select 2];
  28. };
  29. } foreach (_config);
  30. _inv lbSetCurSel 0;
  31. _item = lbData[669,(lbCurSel 669)];
  32. _config = [_itemFilter] call life_fnc_craftCfg;
  33. {
  34. if(_item == _x select 0)then {
  35. _matsNeed = _x select 1;
  36. _invSize = count _matsNeed;
  37. for [{_i = 0},{_i < _invSize - 1},{_i = _i + 2}] do {
  38. _str = M_CONFIG(getText,"VirtualItems",(_matsNeed select _i),"displayName");
  39. _matsNum = _matsNeed select _i+1;
  40. _struct = _struct + format["%1x %2<br/>",_matsNum,(localize _str)];
  41. };
  42. };
  43. } foreach (_config);
  44. _mats ctrlSetStructuredText parseText format["
  45. <t size='0.8px'>
  46. %1
  47. </t>
  48. ",_struct];

step 10:
creates the file fn _ craftcfg.sqf and adds it in / core / config.

  1. #include "..\..\script_macros.hpp"
  2. /*
  3. File: fn_craftCfg.sqf
  4. Author: EdgeKiller
  5. Description:
  6. Master configuration file for the crafting menu.
  7. */
  8. private["_craft","_return"];
  9. _craft = [_this,0,"",[""]] call BIS_fnc_param;
  10. if(_craft == "") exitWith {closeDialog 0}; //Bad shop type passed.
  11. switch(_craft) do {
  12. case "weapon": {
  13. _return = [
  14. //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
  15. ["hgun_P07_F", ["diamond_cut",2,"copper_refined",1]]
  16. ];
  17. if(FETCH_CONST(life_adminlevel) > 0) then {
  18. _return pushBack
  19. ["SMG_01_F", ["copper_refined",3,"iron_refined",3,"diamond_cut",1]];
  20. };
  21. };
  22. case "uniform": {
  23. _return = [
  24. //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
  25. ["U_IG_Guerilla1_1", ["copper_refined",1]]
  26. ];
  27. };
  28. case "backpack": {
  29. _return = [
  30. //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
  31. ["B_Carryall_oli", ["diamond_cut",1]]
  32. ];
  33. };
  34. case "item": {
  35. _return = [
  36. //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
  37. ["iron_refined", ["copper_refined",2]],
  38. ["diamond_cut", ["copper_refined",1,"iron_refined",1]]
  39. ];
  40. };
  41. };
  42. _return;

                                                                                              My English is not very good:)   I'm from China.

                                                                                           Script Apply to 4.4    

 

  • Like 2
Link to comment
Share on other sites

thanks at @AlaskaVet and @AmaZiinG

@hjyydkl122 i have nothing against that you rewrote this tutorial in english, but please credit me and sebi1106 and before ask him for his permission:

 

Quote
885-7957c1f317cbfe930b4a39e81347fb588200

Sebi1106 schrieb:

Hiermit untersage ich wie immer die Verbreitung dieser Daten und die des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.

 

Link to comment
Share on other sites

5 hours ago, B4v4ri4n_Strik3r said:

 

thanks at @AlaskaVet and @AmaZiinG

@hjyydkl122 i have nothing against that you rewrote this tutorial in english, but please credit me and sebi1106 and before ask him for his permission:

 

Quote
885-7957c1f317cbfe930b4a39e81347fb588200

Sebi1106 schrieb:

Hiermit untersage ich wie immer die Verbreitung dieser Daten und die des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.
 

 

 

 

isnt edgekiller the original creator as it was originally posted on old forums

as per the files

 

  1. File: fn_craft_updateFilter.sqf
  2. Description: Crafting System
  3. Created by EdgeKiller
  4. Coder: EdgeKiller
Link to comment
Share on other sites

11 hours ago, armagod said:

isnt edgekiller the original creator as it was originally posted on old forums

as per the files

 

  1. File: fn_craft_updateFilter.sqf
  2. Description: Crafting System
  3. Created by EdgeKiller
  4. Coder: EdgeKiller

Thats true, maybe i also should add "orginally created by EdgeKiller" but I have ported it to 4.4 and fixed some stuff. And at the time I wrote it, I thought it's enough to credit sebi

Link to comment
Share on other sites

  • 4 weeks later...
23 minutes ago, Iceman said:

In stringtable.xml add

        <Key ID="STR_CRAFT_FILTER_Headgear">
            <Original>Headgear</Original>
        </Key>
        <Key ID="STR_CRAFT_FILTER_Vest">
            <Original>Vest</Original>
        </Key>
        
        After
        
        <Key ID="STR_CRAFT_FILTER_Backpack">
            <Original>Backpacks</Original>
        </Key>
        
        In the same file add
        
        </Key>
        <Key ID="STR_STR_CRAFT_AR_Vest">
            <Original>You already have something on!.</Original>
        </Key>
        <Key ID="STR_CRAFT_AR_Headgear">
            <Original>You already have something on!.</Original>
        </Key>
        
        After
        
        <Key ID="STR_CRAFT_AR_Uniform">
            <Original>You already have something on!.</Original>
        </Key>
        
        Then in core\config\fn_craftcfg.cfg add
        
        case "vest": {
            _return = [
            //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]

            ["V_Rangemaster_belt", ["diamond_cut",1]]
            
            ];
        };
            
        case "headgear": {
            _return = [
            //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
            
            ["H_Bandanna_camo", ["diamond_cut",1]]
        
            ];
        };
        
        After
        
        case "backpack": {
                _return = [
                //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        
                ["B_Carryall_oli", ["diamond_cut",1]]

                ];
            };
        
        
        
        In core\actions\fn_craftactions.sqf add
        
        
        if (_itemFilter == "vest" && vest player != "") exitWith {
                    hint localize "STR_CRAFT_AR_Vest";
                        life_action_inUse = false;
                };
        if (_itemFilter == "headgear" && headgear player != "") exitWith {
                    hint localize "STR_CRAFT_AR_Headgear";
                        life_action_inUse = false;
                };
        
        After
        
        
        if (_itemFilter == "uniform" && uniform player != "") exitWith {
                    hint localize "STR_CRAFT_AR_Uniform";
                        life_action_inUse = false;
                };
                
                
    
        Then in the same file add
        
        if (_itemFilter == "vest") then{
            if(vest player == "") then{
                player addVest _newItem;
        } else {
            hint localize "STR_CRAFT_AR_Vest";
                life_is_processing = false;
                life_action_inUse = false;
            };
        };
    
        if (_itemFilter == "headgear") then{
            if(headgear player == "") then{
                player addHeadgear _newItem;
        } else {
            hint localize "STR_CRAFT_AR_Headgear";
                life_is_processing = false;
                life_action_inUse = false;
            };
        };
        
        After
        
        if (_itemFilter == "uniform") then{
            if(uniform player == "") then{
                player addUniform _newItem;
        } else {
            hint localize "STR_CRAFT_AR_Uniform";
                life_is_processing = false;
                life_action_inUse = false;
            };
        };
        
        Then in the core\pmenu\fn_craft.sqf add
        
            _filter lbAdd localize "STR_CRAFT_FILTER_Headgear";
        

            _filter lbSetData[(lbSize _filter)-1,"headgear"];
            
            
            _filter lbAdd localize "STR_CRAFT_FILTER_Vest";
        

            _filter lbSetData[(lbSize _filter)-1,"vest"];
            
        After
        
        
            _filter lbAdd localize "STR_CRAFT_FILTER_Backpack";
        

            _filter lbSetData[(lbSize _filter)-1,"backpack"];
            
        
        Then your done just edit the fn_craftcfg.cfg to your liking.

This adds the vest and headgear.

  • Like 1
Link to comment
Share on other sites

  • 2 months later...
  • 4 weeks later...
  • 3 weeks later...

 

On 27/1/2017 at 9:12 PM, Marcus McGee said:

Its working, but then i press "craft" to make the item. i does not do or say anything...

Hi I have the same problem

On 20/2/2017 at 6:51 AM, temma said:

mpmission\core\actions\fn_craftaction.sqf line19

if (_item == _x select 0)then {

change this

if (_item == _x select 0) then {

this not work

Can you help me?

Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

i have an issue whit that script when i enter in a server to craft i see the gun but the materials are named to "any" i don't know why. but i think i'ts becouse i must set a other weapons. Any can help me whit that i post the screen shot of my file. i use a 4.4 r3

 

#include "..\..\script_macros.hpp"

private["_craft"];
_craft = [_this,0,"",[""]] call BIS_fnc_param;
if(_craft == "") exitWith {closeDialog 0}; //Bad shop type passed.

switch(_craft) do
{
	case "weapon":
	{
		switch(true) do
		{
			default
			{
				["Weapons",
					[
						//[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
						["arifle_AKM_F", ["barrel",1,"gear",3,"woodRefined",3,"steel",2]],
						["gear", ["alluminiumRefined",2]],
						["barrel", ["steel",3]],
						["steel", ["ironRefined",1,"alluminiumRefined",1]],
						["polimer", ["plastic",3,"_glass",1]]
					]
				];
			};
		};
	};
};
	class gear {
        variable = "gear";
        displayName = "Ingranaggio";
        weight = 1;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = "icons\ico_gear.paa";
    };
	
	class polimer {
        variable = "polimer";
        displayName = "Polimero";
        weight = 1;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = "icons\ico_polimer.paa";
    };
	
	class barrel {
        variable = "barrel";
        displayName = "Canna in acciaio";
        weight = 1;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = "icons\ico_barrel.paa";
    };
	
	class plastic {
        variable = "plastic";
        displayName = "STR_Item_Plastic";
        weight = 2;
        buyPrice = -1;
        sellPrice = 5000;
        illegal = false;
        edible = -1;
        icon = "icons\ico_plastic.paa";
    };
	
	class steel {
        variable = "steel";
        displayName = "Acciaio";
        weight = 3;
        buyPrice = -1;
        sellPrice = -1;
        illegal = false;
        edible = -1;
        icon = "icons\ico_steel.paa";
    };
/*
	File: fn_craftAction.sqf
	Author: EdgeKiller

	Description:
	Master handling for crafting an item.
*/
private["_dialog","_item","_itemInfo","_oldItem","_newItem","_upp","_itemName","_ui","_progress","_pgText","_cP","_allMaterial","_matsNeed","_invSize","_handledItem"];

disableSerialization;

_dialog = findDisplay 666;
if((lbCurSel 669) == -1) exitWith {hint localize "STR_ISTR_SelectItemFirst";};
_item = lbData[669,(lbCurSel 669)];
_allMaterial = true;

_matsNeed = 0;

if(!(player canAdd _item)) exitWith {hint localize "STR_NOTF_NoRoom";};

_config = ["weapon"] 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 = [_matsNeed select _i] call life_fnc_varToStr;
			_matsNum = _matsNeed select _i+1;

			if((missionNamespace getVariable (_matsNeed select _i)) < _matsNum) exitWith {_allMaterial = false;};

		};
	};
} foreach (_config select 1);

if(!_allMaterial) exitWith {hint localize "STR_PM_NoMaterial";};

//Error checking
if((count _matsNeed) == 0) exitWith {};




//Setup vars.
_oldItem = _matsNeed;
_newItem = _item;

_itemInfo = [_newItem] call life_fnc_fetchCfgDetails;
_itemName = _itemInfo select 1;

_upp = format["Crafting %1",_itemName];




//Some more checks
if((count _oldItem) == 0) exitWith {};

closeDialog 0;

//Setup our progress bar.
5 cutRsc ["life_progress","PLAIN"];
_ui = uiNameSpace 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,1] call life_fnc_varHandle;
	if(!([false,_handledItem,_oldItem select _i+1] call life_fnc_handleInv)) exitWith {_removeItemSuccess = false;};
};
if(!_removeItemSuccess) exitWith {5 cutText ["","PLAIN"]; life_is_processing = false;};
[] call life_fnc_p_updateMenu;

life_is_processing = true;

while{true} 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 {};
};

_invSize = count _oldItem;

if(!(player addItem _item)) exitWith {
	5 cutText ["","PLAIN"];

	for [{_i = 0},{_i < _invSize - 1},{_i = _i + 2}] do {
		_handledItem = [_oldItem select _i,1] call life_fnc_varHandle;
		[true,_handledItem,_oldItem select _i+1] call life_fnc_handleInv;
	};
	life_is_processing = false;
};
5 cutText ["","PLAIN"];
titleText[format[localize "STR_CRAFT_Process",_itemName],"PLAIN"];
life_is_processing = false;

 

Screenshot_5.png

Screenshot_6.png

Screenshot_45.png

Edited by erBradipo
Link to comment
Share on other sites

  • 2 months later...

#include "..\..\script_macros.hpp"
        /*    
        File: fn_craftCfg.sqf
        Author: EdgeKiller
        Description:
        Master configuration file for the crafting menu.
        */
        private["_craft","_return"];
        _craft = [_this,0,"",[""]] call BIS_fnc_param;
        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]],]
        
        ["KA_Glock_17_Single", ["pistolbody",1,"pipe",1,"iron_refined",1]],
        
        ["KA_17Rnd_9x19_Mag", ["oil_processed",1,"copper_refined",1]],
        
        ["arifle_KA_SKS_F", ["RifleBody",1,"pipe",2,"iron_refined",1]],
        
        ["10Rnd_762x39_US", ["oil_processed",1,"iron_refined",1]],
        
        ["KA_SG_552", ["RifleBody",1,"pipe",2,"iron_refined",3,"toolkit",1]],
        
        ["KA_SIG_30rnd_M856_Tracer_Red_mag", ["oil_processed",1,"iron_refined",2]],
        
        ["APS", ["pipe",2,"iron_refined",3]],
        
        ["26Rnd_566x150_MPS", ["oil_processed",2,"iron_refined",1]],
        
        ["KA_WA2000", ["pipe",2,"iron_refined",1,"riflebody",3,"toolkit",1]],
        
        ["KA_6Rnd_300win_Mag", ["oil_processed",2,"iron_refined",1]],
        
        ["optic_KHS_old", ["pipe",2,"toolkit",1]],
        
        ["optic_aco", ["iron_refined",2,"toolkit",1]]
        
        ];
        if(FETCH_CONST(life_adminlevel) > 0) then {
        _return pushBack
        ["SMG_01_F", ["copper_refined",3,"iron_refined",3,"diamond_cut",1]];
        };
        };
        case "uniform": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        
        ["U_B_T_FullGhillie_tna_F", ["bag",5,"copper_refined",1]],
        
        ["TRYK_U_B_PCUHsW8", ["bag",10]],
        
        ["TRYK_U_B_PCUODHs", ["bag",10]],
        
        ["TRYK_U_B_PCUGs_gry_R", ["bag",10]],
        
        ["U_IG_Guerilla1_1", ["copper_refined",1]],
        
        ["H_ShemagOpen_tan", ["bag",2]],
        
        ["H_ShemagOpen_khk", ["bag",2]],
        
        ["k_hrebel_1", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_2", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_3", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_4", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_5", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_6", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_7", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_8", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_9", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_10", ["bag",10,"iron_refined",2,"copper_refined",3]]
        ];
        };
        case "backpack": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        ["B_Carryall_oli", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Carryall_blk", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Carryall_wh", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Alicepack", ["bag",4]],
        
        ["TRYK_B_Coyotebackpack_BLK", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Coyotebackpack", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Coyotebackpack_OD", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Kitbag_Base", ["bag",4,"iron_refined",1]],
        
        ["B_Bergen_tna_F", ["bag",15,"iron_refined",1,"copper_refined,2]]
        ];
        };
        case "item": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        ["pipe", ["iron_refined",2]],
        
        ["pistolbody", ["iron_refined",1,"pipe",1]],
        
        ["RifleBody", ["iron_refined",3,"pipe",2]],
        
        ["goldbar", ["diamond_cut",10,"oil_processed",2]],
        
        ["cocaine_processed", ["bag",2,"drugbox",1,"cocaine_unprocessed",3]],
        
        ["marijuana", ["bag",2,"drugbox",1,"cannabis",3]],
        
        ["heroin_processed", ["bag",2,"drugbox",1,"heroin_unprocessed",3]]
        
        ];
        };
        };
        _return;

 

I checked everthing but seem like it's not work ingame ? 

Link to comment
Share on other sites

  • 1 month later...
On ‎7‎/‎18‎/‎2017 at 1:33 PM, Shimakaze said:

#include "..\..\script_macros.hpp"
        /*    
        File: fn_craftCfg.sqf
        Author: EdgeKiller
        Description:
        Master configuration file for the crafting menu.
        */
        private["_craft","_return"];
        _craft = [_this,0,"",[""]] call BIS_fnc_param;
        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]],]
        
        ["KA_Glock_17_Single", ["pistolbody",1,"pipe",1,"iron_refined",1]],
        
        ["KA_17Rnd_9x19_Mag", ["oil_processed",1,"copper_refined",1]],
        
        ["arifle_KA_SKS_F", ["RifleBody",1,"pipe",2,"iron_refined",1]],
        
        ["10Rnd_762x39_US", ["oil_processed",1,"iron_refined",1]],
        
        ["KA_SG_552", ["RifleBody",1,"pipe",2,"iron_refined",3,"toolkit",1]],
        
        ["KA_SIG_30rnd_M856_Tracer_Red_mag", ["oil_processed",1,"iron_refined",2]],
        
        ["APS", ["pipe",2,"iron_refined",3]],
        
        ["26Rnd_566x150_MPS", ["oil_processed",2,"iron_refined",1]],
        
        ["KA_WA2000", ["pipe",2,"iron_refined",1,"riflebody",3,"toolkit",1]],
        
        ["KA_6Rnd_300win_Mag", ["oil_processed",2,"iron_refined",1]],
        
        ["optic_KHS_old", ["pipe",2,"toolkit",1]],
        
        ["optic_aco", ["iron_refined",2,"toolkit",1]]
        
        ];
        if(FETCH_CONST(life_adminlevel) > 0) then {
        _return pushBack
        ["SMG_01_F", ["copper_refined",3,"iron_refined",3,"diamond_cut",1]];
        };
        };
        case "uniform": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        
        ["U_B_T_FullGhillie_tna_F", ["bag",5,"copper_refined",1]],
        
        ["TRYK_U_B_PCUHsW8", ["bag",10]],
        
        ["TRYK_U_B_PCUODHs", ["bag",10]],
        
        ["TRYK_U_B_PCUGs_gry_R", ["bag",10]],
        
        ["U_IG_Guerilla1_1", ["copper_refined",1]],
        
        ["H_ShemagOpen_tan", ["bag",2]],
        
        ["H_ShemagOpen_khk", ["bag",2]],
        
        ["k_hrebel_1", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_2", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_3", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_4", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_5", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_6", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_7", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_8", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_9", ["bag",10,"iron_refined",2,"copper_refined",3]],
        
        ["k_hrebel_10", ["bag",10,"iron_refined",2,"copper_refined",3]]
        ];
        };
        case "backpack": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        ["B_Carryall_oli", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Carryall_blk", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Carryall_wh", ["bag",6,"copper_refined",1]],
        
        ["TRYK_B_Alicepack", ["bag",4]],
        
        ["TRYK_B_Coyotebackpack_BLK", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Coyotebackpack", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Coyotebackpack_OD", ["bag",4,"iron_refined",1]],
        
        ["TRYK_B_Kitbag_Base", ["bag",4,"iron_refined",1]],
        
        ["B_Bergen_tna_F", ["bag",15,"iron_refined",1,"copper_refined,2]]
        ];
        };
        case "item": {
        _return = [
        //[Object classname, [item #1,quantity item #1,item #2,quantity item #2]],]
        ["pipe", ["iron_refined",2]],
        
        ["pistolbody", ["iron_refined",1,"pipe",1]],
        
        ["RifleBody", ["iron_refined",3,"pipe",2]],
        
        ["goldbar", ["diamond_cut",10,"oil_processed",2]],
        
        ["cocaine_processed", ["bag",2,"drugbox",1,"cocaine_unprocessed",3]],
        
        ["marijuana", ["bag",2,"drugbox",1,"cannabis",3]],
        
        ["heroin_processed", ["bag",2,"drugbox",1,"heroin_unprocessed",3]]
        
        ];
        };
        };
        _return;

 

I checked everthing but seem like it's not work ingame ? 

what version of altis life are you running?
there is a newer version on Native, but you'd have to translate it.

 

 

Edited by Deadongaming
Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...
  • 3 months later...
  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.