Jump to content

[Release] Mystery Briefcase


Rocu

Recommended Posts

Version 1.1 (Last update: 13.11.2014)

 

 

What is this?

 

Mystery Briefcase is a simple addon script that turns an otherwise completely useless item into a prize-giving briefcase. You obtain the briefcase, right click on it, select Open and you are rewarded with 6 randomly picked items ranging from beans to chainsaws. Similar to Battlefield 4's battlepacks. Perfect for giving away during events.

 

 

 

Demo video

 

Check this video below for a more clear explanation:

https://www.youtube.com/watch?v=3NxaCW_28xU

 

 

 

Requirements

 

 

 

Download

 

Download available here: https://github.com/Rocu/Epoch_MysterBriefcase

 

 

 

Installation

  1. Firstly, download & install Maca134's Right Click Option script if you haven't done it already
     
  2. Un-pack your mission's PBO (using PBO manager or a similar tool)
     
  3. Download Mystery Briefcase files from my GitHub page
    Copy the mbc folder into your mission's addons folder. If you don't have an addons folder in there then create it. (For example config.sqf path should now be: Your_mission_folder\addons\mbc\config.sqf)
     
  4. Open description.ext (from mission PBO)

    Find:
    class DayZ_loadingScreen
    

    Above it, add this:

    class CfgSounds
    {
    	sounds[] = {Brief_Open_Sound};
    	class Brief_Open_Sound
    	{
    		name = "Brief_Open_Sound";
    		sound[] = {addons\mbc\brief_open.ogg,0.4,1};
    		titles[] = {};
    	};
    };
    
    

    Note that if you already have custom sounds in your description.ext then just add the Brief_Open_Sound class manually (using the example above)

    At the bottom of description.ext, add this:

    // Mystery Briefcase by Rocu
    #include "addons\mbc\dialogs.hpp"
    

    Save & close description.ext
     

  5.  

    Open up your custom compiles.sqf file (if you don't have one, )

    At the very bottom, add this:


    // Mystery Briefcase by Rocu
    call compile preprocessFileLineNumbers "addons\mbc\config.sqf";
    

    Save & close compiles.sqf

     

     

  6. Open extra_rc.hpp (if you installed Maca's script correctly you should have that file in \custom\ folder)

    Find:

    class ExtraRc {
    

    Below it, add:

    class ItemBriefcase_Base {
    	class OpenSurpriseBrief {
    		text = "Open Briefcase";
    		script = "execVM 'addons\mbc\open_brief.sqf'";
    	};
    };
    

    Save & close extra_rc.hpp

     

     

  7. Re-pack your mission's PBO and you're done!

 

If you wish to further configure the script you can do so in the config.sqf file.

 

For Infistar's Anti-Hack users you may want to add this as well:

Open AHconfig.sqf

 

Add this:

81000 

To:

_ALLOWED_Dialogs

Example:

_ALLOWED_Dialogs = [-1,106,2200,6900,6901,6902,6903,...........,81000];

Thanks Zipper for this.

 

 

 

 

Additional info

 

NOTE! When you first install the script you should know that the briefcase item itself doesn't spawn anywhere by default so you need to add it to the game manually. You can add it to the loot tables or traders using the following class name: ItemBriefcase_Base.

 

It does support Zupa's Single Currency (gives out cash as a reward). If you don't have Single Currency it will still work perfectly, just don't put coins in the reward list (it isn't there by default).

 

If you're planning to sell the briefcase in traders I recommend not setting it's price lower than 200,000 (or 2 briefcases if you're not using Single Currency). I haven't really spent ages working on balancing the reward but 200k should be a decent price for this (considering how sometimes you won't even get 50k back but sometimes you quadruple your profits).

 

 

 

Technical stuff

 

For the more technical guys out there - as you can see I used the ItemBriefcase_Base class for this script as it has the model of a briefcase but no other properties. I understand it's being used as base item for other briefcases but AFAIK it doesn't affect any of the other briefcases. The script itself isn't really a game changer. Just generates 6 random items with a little UI and puts them in a box. It's completely independent and doesn't rely on other scripts which means if one were to reverse-engineer it you could attach it to virtually anywhere.

 

If you're editing the config file the rarity field doesn't have to sum up to 100% anymore. The percentage of item's rarity depends on the sum of the rarity field. For example, let's say we have only 3 items in the loot table with 50 rarity for every item. This means that every item actually has 33,3% chance of being picked. But for the sake of the script's speed I recommend you keep the rarity number as low as possible. Having 3 items with 1 rarity is a lot better than having 3 items with 50 rarity even though in both versions they all have 33,3% chance of being picked.

 

 

 

Credits

Maca134 - For the right click option script

Zipper - For Infistar's AH compatibility

f3cuk - For contributing to the script

+Many others who've been very helpful lately!

Link to comment
Share on other sites

Battleeye FIlter?

 

No filter needed, default ones should be enough. It doesn't use anything that explicit.

Infistar is a different matter though. You probably need to add some UI exceptions in there as far as I know but I don't have Infistar myself so I probably need someone else's help with that.

 

 

Hm, very cool. I think it can be used for lottery tickets  :D

 

Thanks and yes, you're right. It can be used for that.

 

 

This looks great. It's a fantastic use of an otherwise useless item and the sound and GUI are spot on!

 

Thanks, hope you'll find a good use out of it.

Link to comment
Share on other sites

I'm using infiSTAR. Getting kicked by Battleye constantly. Working my way through the filters though.

 

So far I've had to:

 

publicvariable.txt - add to the end of line 2:

!="diagLogr"

That fixed one type of kick. Now I'm getting the following:

Player Canuck Brian kicked off by BattlEye: PublicVariable Value Restriction #100

Here's the BE Log:

11.11.2014 00:58:04: Canuck Brian (199.195.149.121:2304) 6271a627658b56eca6e19bd60b6db82e - Value Restriction #100 "diagLogr" = "[BRIEF] Array created: [["coins","Coins",50000,2,5],["group_mag","Skin_Sniper1_DZ",1,2,10],["group_mag","ItemPainkiller",1,1,2],["group_wep","SVD_des_EP1",2,2,8],["group_mag","ItemLockbox",1,2,10],["group_wep","MK_48_DZ",2,3,3]]"

Can you share your publicvariable.txt file with us?

Link to comment
Share on other sites

//new
5 "" !="diagLogr" !"PVDZE_" !"norrn" !"usec" !="remExField" !="remExFP" !="drn_AskServerDynamicWeatherEventArgs" !="cad_pvar_send_owner" !="norrinRAlie" !="BIS_effects_gepv" !="dayzPlayerLogin" !="dayzPlayerLogin2" !"PVAHR_" !="PVAH_AdminReq" !="PVAH_WriteLogReq" !="owner_B1" !="owner_B2" !="owner_B3" !="owner_H1" !="owner_H2" !="owner_H3" !="owner_SG" !="owner_LG" !="owner_KING" !="owner_SH" !="OriginsLockUnlock" !="currentInvites" !"DDOPP_pvSay" !"DDOPP_pvAnim" !"DDOPP_pvSpawn" !"DDOPP_pvChat"
5 "norrn" !="norrnRACarUp" !="norrnRAPicUp" !="norrnRaDrag" !="norrnR180" !="norrnRalie" !="norrnRLact" !="norrnRALW" !="norrnRDead"
5 "usec" !="usecMorphine" !="usecBandage" !="usecBleed"
5 "PVDZE_" !"PVDZE_account_Doublecheck" !"PVDZE_player" !="PVDZE_send" !="PVDZE_log_lockUnlock" !="PVDZE_Server_Simulation" !="PVDZE_veh_Update" !="PVDZE_plr_GutBody" !="PVDZE_plr_GutBodyZ" !="PVDZE_veh_Lock" !="PVDZE_plr_DeathB" !="PVDZE_maintainArea" !="PVDZE_obj_Publish" !="PVDZE_obj_Swap" !="PVDZE_plr_Save" !="PVDZE_obj_Delete" !="PVDZE_obj_Trade" !="PVDZE_veh_Publish2" !="PVDZE_zed_Spawn" !="PVDZE_plr_Died" !="PVDZE_plr_TradeMenu" !="PVDZE_veh_Upgrade" !="PVDZE_atp" !="PVDZE_plr_Login" !="PVDZE_plr_Login2" !="PVDZE_plr_LoginRecord" !="PVDZE_plr_DeathBResult" !="PVDZE_veh_SFix" !="PVDZE_plr_Hit" !="PVDZE_plr_HitV" !="PVDZE_veh_SFuel" !="PVDZE_plr_HideBody" !="PVDZE_plr_Morph" !="PVDZE_veh_Publish" !="PVDZE_plr_Characters" !="PVDZE_lockVault" !="PVDZE_obj_setlocalVars" !="PVDZE_obj_getlocalVars" !="PVDZE_bank_Save"
5 "PVAHR_" !"PVAHR_0_" !"PVAHR_0_dkwgqfknbauo"
5 "remExFP" !="\"remExFP\" = \[,,\"per\",\"execVM\",\"ca\\Modules\\Functions\\init.sqf\"\]" !"\[,,\"per\",\"execVM\",\"ca\\Modules\\Functions\\init.sqf\"\]"
5="player"
5="server"
5 "fnc_plyrHit"
5 "AntiHack"
1="PVAH_AdminReq"
1="PVAH_WriteLogReq"
1 "PVAHR_0_"
1 "Delete"
Link to comment
Share on other sites

thankz for this. 

to use with deploy anything instead of extraRc 

edit 

overwrites\click_actions\config.sqf

["ItemBriefcase_Base","open briefcase","execVM 'addons\mbc\open_brief.sqf';","true"],

for BE kick

Value Restriction #99 "diagLogr" = "[BRIEF] Array created: [["group_mag","bulk_ItemSandbag",1,2,12],["magazine","PartPlywoodPack",15,2,7],["group_wep","M107_DZ",2,3,5],["magazine","PartPlankPack",15,2,7],["group_mag","FoodMRE",1,1,4],["group_mag","ItemSledgeHandle",1,2,12]]"

edit publicvariableval.txt

 

find 5 "createD"

change to 1 "createD"  or

// 5 "createD"

Link to comment
Share on other sites

I'm using infiSTAR. Getting kicked by Battleye constantly. Working my way through the filters though.

 

Oh yes, that. I completely forgot about that. diagLogr is a completely separate script I use for debugging. It uses public variables and therefor players are being kicked. I accidentally left it in when I was last debugging it. Completely forgot.

 

Updated the files & removed all debugging. You shouldn't get kicked anymore and you don't need to add diagLogr in publicvariable.txt.

Link to comment
Share on other sites

Changed the config a little and added some more stuff (plus removed the gems). For anyone interested.

/*
        Mystery Briefcase addon by Rocu
        Configuration file
*/

MBT_NAME = "EpochPacks"; //Name of the item that spawns the reward (this is just a visual thing, code won't break if you change this to something random)
MBT_CRATEDELAY = 900; //How long until the reward crate disappears (in seconds) Default: 900 (15 minutes)
MBT_DIALOG_TITLE = "EpochPack opening"; //Reward dialog title
MBT_DIALOG_CLAIM = "Claim Your Reward"; //Claim reward button
MBT_DIALOG_NOTE = "* After claiming your prize the reward crate will disappear in 15 minutes."; //Notation warning about the crate's delay

/*
        REWARD CONFIGURATION
        Everything that has to do with the prize you get from the briefcase
*/

// Junk
_junk_group = ["HandRoadFlare","TrashTinCan","FoodCanUnlabeled","HandChemBlue","HandChemRed","HandChemGreen","ItemBook3","ItemBook4","ItemSodaR4z0rEmpty","ItemSodaDrwasteEmpty","ItemSodaLemonadeEmpty","ItemSodaLvgEmpty","ItemSodaMzlyEmpty","ItemSodaRabbitEmpty","ItemSodaClaysEmpty","TrashJackDaniels","TrashTinCan","ItemLetter","ItemBook1","ItemBook2","ItemTrashRazor","FoodCanOrlokEmpty","FoodCanDemonEmpty","FoodCanTylersEmpty","FoodCanCornEmpty","FoodCanBoneboyEmpty","FoodCanBadguyEmpty","FoodCanGriffEmpty","FoodCanPowellEmpty","FoodCanHerpyEmpty","FoodCanUnlabeledEmpty","FoodCanCurgonEmpty","FoodCanFraggleosEmpty","ItemTrashToiletpaper"];

// Common
_food_group = ["ItemWaterbottle","FoodNutmix","FoodPistachio","FoodMRE","ItemSodaOrangeSherbet","ItemSodaRbull","ItemSodaR4z0r","ItemSodaMdew","ItemSodaPepsi","ItemSodaCoke","FoodbaconCooked","FoodCanBakedBeans","FoodCanFrankBeans","FoodCanPasta","FoodCanSardines","FoodchickenCooked","FoodmuttonCooked","FoodrabbitCooked","ItemTroutCooked","ItemTunaCooked","ItemSeaBassCooked","FoodCanGriff","FoodCanTylers","FoodCanDemon","FoodCanPowell","FoodCanCorn","FoodCanOrlok","FoodCanHerpy","FoodCanBadguy","FoodCanBoneboy","FoodCanCurgon","FoodCanFraggleos","ItemSodaRabbit","ItemSodaMtngreenEmpty","ItemSodaSmashtEmpty","ItemSodaMtngreen","ItemSodaDrwaste","ItemSodaSmasht","ItemSodaClays","ItemSodaLemonade","ItemSodaLvg"];
_military_group = ["FlareWhite_M203","FlareGreen_M203","1Rnd_Smoke_M203","HandGrenade_west","HandGrenade_east","SmokeShell","SmokeShellRed","SmokeShellGreen","FoodMRE","Skin_Camo1_DZ","Skin_Rocket_DZ","Skin_Soldier1_DZ","Skin_Drake_Light_DZ"];
_medical_group = ["ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemHeatPack","ItemMorphine","ItemBandage","FoodCanFrankBeans","FoodCanPasta"];
_vehicle_repair_group = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel"];

_common_group = ["ItemPlotDeed","ItemComboLock","ItemSledgeHead","ItemSledgeHandle","Skin_Sniper1_DZ","bulk_ItemSandbag"];
_assault_group = ["M16A4_ACG","Sa58V_RCO_EP1","SCAR_L_STD_Mk4CQT","M8_sharpshooter","M4A1_HWS_GL_camo","SCAR_L_STD_HOLO","M4A3_CCO_EP1","M4A1_AIM_SD_camo","M16A4","m8_carbine","BAF_L85A2_RIS_Holo","Sa58P_EP1","Sa58V_CCO_EP1","Sa58V_EP1","AKS_74_kobra","AKS_74_U","AKS_GOLD","AK_47_M","AK_74","FN_FAL","FN_FAL_ANPVS4","m8_compact","G36A_camo","G36C","m8_holo_sd","G36C_camo","G36K_camo","G36_C_SD_camo","M16A2","M16A2GL","M4A1","M4A1_Aim"];
_lmg_group = ["RPK_74","M249_EP1_DZ","M249_DZ","M240_DZ","m240_scoped_EP1_DZE","M249_m145_EP1_DZE","M60A4_EP1_DZE"];
_sniper_group = ["M14_EP1","SVD_CAMO","SVD","VSS_Vintorez","DMR_DZ","M40A3","M24","M24_des_EP1","SVD_des_EP1"];
_tools_group = ["ItemKeyKit","Binocular","Binocular_Vector","ItemCompass","ItemCrowbar","ItemEtool","ItemFishingPole","ItemFlashlightRed","ItemGPS","ItemHatchet_DZE","ItemKnife","ItemMachete","ItemMatchbox_DZE","ItemToolbox","NVGoggles"];
_chainbullets_group    = ["2000Rnd_762x51_M134","200Rnd_762x51_M240","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"];

// Rares
_rares_group = ["ItemVault","ItemBriefcase100oz","ItemLockbox","30m_plot_kit"];
_rare_weapons_group = ["KSVK_DZE","MK_48_DZ","Pecheneg_DZ","M110_NVG_EP1","SCAR_H_LNG_Sniper_SD","M107_DZ","BAF_LRR_scoped"];

// Legendaries
_legend_group = ["PipeBomb","ItemHotwireKit"];
_chainsaw_group = ["Chainsaw","ChainsawB","ChainsawG","ChainsawP","BAF_AS50_scoped"];

MBC_REWARDLIST = [
    //Reward List format:
    //[type,item,quantity,raritylevel,rarity]
    //        type - item type. Available options:
    //            magazine - any type of magazine and most general items (briefcases, cinder blocks, ammunition, etc)
    //            weapon - any type of weapon, note that toolbelt items are also considered weapons in Arma
    //            group_mag - a group of magazines. This is an array of items from which only 1 will be randomly picked
    //            group_wep - a group of weapons. An array of weapons from which only 1 will be randomly picked
    //            coins - this is for Zupa's Single Currency script only. Only use it if you have that script. If you don't do not use coins as a type for reward
    //            script - this is an experimental feature for more advanced users. I haven't tested it thoroughly so use it at your own risk.
    //                It was meant to work as a power-up rather than having an item as a reward. If you use "script" as a type, you must type the script's full path to the "item" field
    //        item - class name of item. If type is group, insert the group's variable. Example: 30m_plot_pole, ItemHotwireKit, _sniper_group, _junk_group
    //        quantity - number of items, set it to 1 if you're using grouping. Example: 15 (in case item is ItemHotwireKit then it will give you 15 Hotwire Kits)
    //        raritylevel - the level of rarity from 1 to 4 (1 = least rare, 4 = rarest), this is just visual for the UI
    //        rarity - how likely this item will be picked in percentage (from 0 to 100)
    //            Note: total sum of rarity must equal 100
    
    // Bad luck (junk items with low possibility)
     ["group_mag",_junk_group,1,1,2]
    
    // Common
    ,["group_wep",_assault_group,1,2,6]
    ,["group_wep",_lmg_group,1,2,8]
    ,["group_wep",_sniper_group,1,2,6]
    ,["group_wep",_tools_group,1,2,6]
    ,["group_mag",_military_group,1,2,2]
    ,["group_mag",_medical_group,5,2,2]
    ,["group_mag",_vehicle_repair_group,2,2,2]
    ,["group_mag",_common_group,1,2,6]
    ,["group_mag",_chainbullets_group,5,2,4]
    ,["coins","Coins",2500,2,7]
    ,["coins","Coins",3000,2,6]
    ,["coins","Coins",5000,2,4]
    ,["magazine","ItemGoldBar10oz",3,2,5]
    ,["magazine","PartPlywoodPack",15,2,5]
    ,["magazine","PartPlankPack",15,2,5]
    
    // Rare
    ,["group_wep",_rare_weapons_group,1,3,3]
    ,["group_mag",_rares_group,1,3,3]
    ,["magazine","ItemGoldBar10oz",10,3,2]
    ,["coins","Coins",100000,3,2]
    ,["magazine","CinderBlocks",15,3,3]
    ,["magazine","PartPlywoodPack",30,3,2]
    ,["magazine","PartPlankPack",30,3,2]
    ,["magazine","ItemPole",30,3,2]
    
    // Legendary
    ,["group_wep",_chainsaw_group,1,4,1]
    ,["group_mag",_legend_group,1,4,1]
    ,["magazine","ItemBriefcase_Base",1,4,1]
    ,["coins","Coins",20000,4,1]
    ,["coins","Coins",50000,4,1]
];

 

One suggestion that would make this one even more epic is to add vehicles ( spawn it nearby and add key to the crate). You might want to checkout how Jossy did that with Wicked AI.

 

Cheers!

Link to comment
Share on other sites

Changed the config a little and added some more stuff (plus removed the gems). For anyone interested.

/*
        Mystery Briefcase addon by Rocu
        Configuration file
*/

MBT_NAME = "EpochPacks"; //Name of the item that spawns the reward (this is just a visual thing, code won't break if you change this to something random)
MBT_CRATEDELAY = 900; //How long until the reward crate disappears (in seconds) Default: 900 (15 minutes)
MBT_DIALOG_TITLE = "EpochPack opening"; //Reward dialog title
MBT_DIALOG_CLAIM = "Claim Your Reward"; //Claim reward button
MBT_DIALOG_NOTE = "* After claiming your prize the reward crate will disappear in 15 minutes."; //Notation warning about the crate's delay

/*
        REWARD CONFIGURATION
        Everything that has to do with the prize you get from the briefcase
*/

// Junk
_junk_group = ["HandRoadFlare","TrashTinCan","FoodCanUnlabeled","HandChemBlue","HandChemRed","HandChemGreen","ItemBook3","ItemBook4","ItemSodaR4z0rEmpty","ItemSodaDrwasteEmpty","ItemSodaLemonadeEmpty","ItemSodaLvgEmpty","ItemSodaMzlyEmpty","ItemSodaRabbitEmpty","ItemSodaClaysEmpty","TrashJackDaniels","TrashTinCan","ItemLetter","ItemBook1","ItemBook2","ItemTrashRazor","FoodCanOrlokEmpty","FoodCanDemonEmpty","FoodCanTylersEmpty","FoodCanCornEmpty","FoodCanBoneboyEmpty","FoodCanBadguyEmpty","FoodCanGriffEmpty","FoodCanPowellEmpty","FoodCanHerpyEmpty","FoodCanUnlabeledEmpty","FoodCanCurgonEmpty","FoodCanFraggleosEmpty","ItemTrashToiletpaper"];

// Common
_food_group = ["ItemWaterbottle","FoodNutmix","FoodPistachio","FoodMRE","ItemSodaOrangeSherbet","ItemSodaRbull","ItemSodaR4z0r","ItemSodaMdew","ItemSodaPepsi","ItemSodaCoke","FoodbaconCooked","FoodCanBakedBeans","FoodCanFrankBeans","FoodCanPasta","FoodCanSardines","FoodchickenCooked","FoodmuttonCooked","FoodrabbitCooked","ItemTroutCooked","ItemTunaCooked","ItemSeaBassCooked","FoodCanGriff","FoodCanTylers","FoodCanDemon","FoodCanPowell","FoodCanCorn","FoodCanOrlok","FoodCanHerpy","FoodCanBadguy","FoodCanBoneboy","FoodCanCurgon","FoodCanFraggleos","ItemSodaRabbit","ItemSodaMtngreenEmpty","ItemSodaSmashtEmpty","ItemSodaMtngreen","ItemSodaDrwaste","ItemSodaSmasht","ItemSodaClays","ItemSodaLemonade","ItemSodaLvg"];
_military_group = ["FlareWhite_M203","FlareGreen_M203","1Rnd_Smoke_M203","HandGrenade_west","HandGrenade_east","SmokeShell","SmokeShellRed","SmokeShellGreen","FoodMRE","Skin_Camo1_DZ","Skin_Rocket_DZ","Skin_Soldier1_DZ","Skin_Drake_Light_DZ"];
_medical_group = ["ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemHeatPack","ItemMorphine","ItemBandage","FoodCanFrankBeans","FoodCanPasta"];
_vehicle_repair_group = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel"];

_common_group = ["ItemPlotDeed","ItemComboLock","ItemSledgeHead","ItemSledgeHandle","Skin_Sniper1_DZ","bulk_ItemSandbag"];
_assault_group = ["M16A4_ACG","Sa58V_RCO_EP1","SCAR_L_STD_Mk4CQT","M8_sharpshooter","M4A1_HWS_GL_camo","SCAR_L_STD_HOLO","M4A3_CCO_EP1","M4A1_AIM_SD_camo","M16A4","m8_carbine","BAF_L85A2_RIS_Holo","Sa58P_EP1","Sa58V_CCO_EP1","Sa58V_EP1","AKS_74_kobra","AKS_74_U","AKS_GOLD","AK_47_M","AK_74","FN_FAL","FN_FAL_ANPVS4","m8_compact","G36A_camo","G36C","m8_holo_sd","G36C_camo","G36K_camo","G36_C_SD_camo","M16A2","M16A2GL","M4A1","M4A1_Aim"];
_lmg_group = ["RPK_74","M249_EP1_DZ","M249_DZ","M240_DZ","m240_scoped_EP1_DZE","M249_m145_EP1_DZE","M60A4_EP1_DZE"];
_sniper_group = ["M14_EP1","SVD_CAMO","SVD","VSS_Vintorez","DMR_DZ","M40A3","M24","M24_des_EP1","SVD_des_EP1"];
_tools_group = ["ItemKeyKit","Binocular","Binocular_Vector","ItemCompass","ItemCrowbar","ItemEtool","ItemFishingPole","ItemFlashlightRed","ItemGPS","ItemHatchet_DZE","ItemKnife","ItemMachete","ItemMatchbox_DZE","ItemToolbox","NVGoggles"];
_chainbullets_group    = ["2000Rnd_762x51_M134","200Rnd_762x51_M240","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"];

// Rares
_rares_group = ["ItemVault","ItemBriefcase100oz","ItemLockbox","30m_plot_kit"];
_rare_weapons_group = ["KSVK_DZE","MK_48_DZ","Pecheneg_DZ","M110_NVG_EP1","SCAR_H_LNG_Sniper_SD","M107_DZ","BAF_LRR_scoped"];

// Legendaries
_legend_group = ["PipeBomb","ItemHotwireKit"];
_chainsaw_group = ["Chainsaw","ChainsawB","ChainsawG","ChainsawP","BAF_AS50_scoped"];

MBC_REWARDLIST = [
    //Reward List format:
    //[type,item,quantity,raritylevel,rarity]
    //        type - item type. Available options:
    //            magazine - any type of magazine and most general items (briefcases, cinder blocks, ammunition, etc)
    //            weapon - any type of weapon, note that toolbelt items are also considered weapons in Arma
    //            group_mag - a group of magazines. This is an array of items from which only 1 will be randomly picked
    //            group_wep - a group of weapons. An array of weapons from which only 1 will be randomly picked
    //            coins - this is for Zupa's Single Currency script only. Only use it if you have that script. If you don't do not use coins as a type for reward
    //            script - this is an experimental feature for more advanced users. I haven't tested it thoroughly so use it at your own risk.
    //                It was meant to work as a power-up rather than having an item as a reward. If you use "script" as a type, you must type the script's full path to the "item" field
    //        item - class name of item. If type is group, insert the group's variable. Example: 30m_plot_pole, ItemHotwireKit, _sniper_group, _junk_group
    //        quantity - number of items, set it to 1 if you're using grouping. Example: 15 (in case item is ItemHotwireKit then it will give you 15 Hotwire Kits)
    //        raritylevel - the level of rarity from 1 to 4 (1 = least rare, 4 = rarest), this is just visual for the UI
    //        rarity - how likely this item will be picked in percentage (from 0 to 100)
    //            Note: total sum of rarity must equal 100
    
    // Bad luck (junk items with low possibility)
     ["group_mag",_junk_group,1,1,2]
    
    // Common
    ,["group_wep",_assault_group,1,2,6]
    ,["group_wep",_lmg_group,1,2,8]
    ,["group_wep",_sniper_group,1,2,6]
    ,["group_wep",_tools_group,1,2,6]
    ,["group_mag",_military_group,1,2,2]
    ,["group_mag",_medical_group,5,2,2]
    ,["group_mag",_vehicle_repair_group,2,2,2]
    ,["group_mag",_common_group,1,2,6]
    ,["group_mag",_chainbullets_group,5,2,4]
    ,["coins","Coins",2500,2,7]
    ,["coins","Coins",3000,2,6]
    ,["coins","Coins",5000,2,4]
    ,["magazine","ItemGoldBar10oz",3,2,5]
    ,["magazine","PartPlywoodPack",15,2,5]
    ,["magazine","PartPlankPack",15,2,5]
    
    // Rare
    ,["group_wep",_rare_weapons_group,1,3,3]
    ,["group_mag",_rares_group,1,3,3]
    ,["magazine","ItemGoldBar10oz",10,3,2]
    ,["coins","Coins",100000,3,2]
    ,["magazine","CinderBlocks",15,3,3]
    ,["magazine","PartPlywoodPack",30,3,2]
    ,["magazine","PartPlankPack",30,3,2]
    ,["magazine","ItemPole",30,3,2]
    
    // Legendary
    ,["group_wep",_chainsaw_group,1,4,1]
    ,["group_mag",_legend_group,1,4,1]
    ,["magazine","ItemBriefcase_Base",1,4,1]
    ,["coins","Coins",20000,4,1]
    ,["coins","Coins",50000,4,1]
];

 

One suggestion that would make this one even more epic is to add vehicles ( spawn it nearby and add key to the crate). You might want to checkout how Jossy did that with Wicked AI.

 

Cheers!

 

Thanks for improving the list. You're right about gems. By default they're not really worth anything. I added this keeping in mind my own server where they're quite rare and worth a lot. Although I noticed a little error in your conf. You've inserted 100000 coins under Rares even though under Legendaries you have no more than 50000. Probably a typo just one 0 too many.

 

I actually thought about adding vehicles but I figured I'd release the initial version first and see if any major issues surface. I think I'll be adding vehicles soon when I have more free time.

Link to comment
Share on other sites

Yep noticed that. Did some more work on the config and added the group_tool option.

 

/*
        Mystery Briefcase addon by Rocu
        Configuration file
*/

MBT_NAME = "EpochPacks"; //Name of the item that spawns the reward (this is just a visual thing, code won't break if you change this to something random)
MBT_CRATEDELAY = 900; //How long until the reward crate disappears (in seconds) Default: 900 (15 minutes)
MBT_DIALOG_TITLE = "EpochPack opening"; //Reward dialog title
MBT_DIALOG_CLAIM = "Claim Your Reward"; //Claim reward button
MBT_DIALOG_NOTE = "* After claiming your prize the reward crate will disappear in 15 minutes."; //Notation warning about the crate's delay

/*
        REWARD CONFIGURATION
        Everything that has to do with the prize you get from the briefcase
*/

// Junk
_junk_group = ["HandRoadFlare","TrashTinCan","FoodCanUnlabeled","HandChemBlue","HandChemRed","HandChemGreen","ItemBook3","ItemBook4","ItemSodaR4z0rEmpty","ItemSodaDrwasteEmpty","ItemSodaLemonadeEmpty","ItemSodaLvgEmpty","ItemSodaMzlyEmpty","ItemSodaRabbitEmpty","ItemSodaClaysEmpty","TrashJackDaniels","TrashTinCan","ItemLetter","ItemBook1","ItemBook2","ItemTrashRazor","FoodCanOrlokEmpty","FoodCanDemonEmpty","FoodCanTylersEmpty","FoodCanCornEmpty","FoodCanBoneboyEmpty","FoodCanBadguyEmpty","FoodCanGriffEmpty","FoodCanPowellEmpty","FoodCanHerpyEmpty","FoodCanUnlabeledEmpty","FoodCanCurgonEmpty","FoodCanFraggleosEmpty","ItemTrashToiletpaper"];

// Common
_food_group = ["ItemWaterbottle","FoodNutmix","FoodPistachio","FoodMRE","ItemSodaOrangeSherbet","ItemSodaRbull","ItemSodaR4z0r","ItemSodaMdew","ItemSodaPepsi","ItemSodaCoke","FoodbaconCooked","FoodCanBakedBeans","FoodCanFrankBeans","FoodCanPasta","FoodCanSardines","FoodchickenCooked","FoodmuttonCooked","FoodrabbitCooked","ItemTroutCooked","ItemTunaCooked","ItemSeaBassCooked","FoodCanGriff","FoodCanTylers","FoodCanDemon","FoodCanPowell","FoodCanCorn","FoodCanOrlok","FoodCanHerpy","FoodCanBadguy","FoodCanBoneboy","FoodCanCurgon","FoodCanFraggleos","ItemSodaRabbit","ItemSodaMtngreenEmpty","ItemSodaSmashtEmpty","ItemSodaMtngreen","ItemSodaDrwaste","ItemSodaSmasht","ItemSodaClays","ItemSodaLemonade","ItemSodaLvg"];
_military_group = ["FlareWhite_M203","FlareGreen_M203","1Rnd_Smoke_M203","HandGrenade_west","HandGrenade_east","SmokeShell","SmokeShellRed","SmokeShellGreen","FoodMRE","Skin_Camo1_DZ","Skin_Rocket_DZ","Skin_Soldier1_DZ","Skin_Drake_Light_DZ"];
_medical_group = ["ItemAntibiotic","ItemBloodbag","ItemEpinephrine","ItemHeatPack","ItemMorphine","ItemBandage"];
_vehicle_repair_group = ["PartEngine","PartFueltank","PartGeneric","PartGlass","PartVRotor","PartWheel"];

_common_group = ["ItemPlotDeed","ItemComboLock","ItemSledgeHead","ItemSledgeHandle","Skin_Sniper1_DZ","bulk_ItemSandbag"];
_assault_group = ["M16A4_ACG","Sa58V_RCO_EP1","SCAR_L_STD_Mk4CQT","M8_sharpshooter","M4A1_HWS_GL_camo","SCAR_L_STD_HOLO","M4A3_CCO_EP1","M4A1_AIM_SD_camo","M16A4","m8_carbine","BAF_L85A2_RIS_Holo","Sa58P_EP1","Sa58V_CCO_EP1","Sa58V_EP1","AKS_74_kobra","AKS_74_U","AKS_GOLD","AK_47_M","AK_74","FN_FAL","FN_FAL_ANPVS4","m8_compact","G36A_camo","G36C","m8_holo_sd","G36C_camo","G36K_camo","G36_C_SD_camo","M16A2","M16A2GL","M4A1","M4A1_Aim"];
_lmg_group = ["RPK_74","M249_EP1_DZ","M249_DZ","M240_DZ","m240_scoped_EP1_DZE","M249_m145_EP1_DZE","M60A4_EP1_DZE"];
_sniper_group = ["M14_EP1","SVD_CAMO","SVD","VSS_Vintorez","DMR_DZ","M40A3","M24","M24_des_EP1","SVD_des_EP1"];
_tools_group = ["ItemKeyKit","Binocular","Binocular_Vector","ItemCompass","ItemCrowbar","ItemEtool","ItemFishingPole","ItemFlashlightRed","ItemGPS","ItemHatchet_DZE","ItemKnife","ItemMachete","ItemMatchbox_DZE","ItemToolbox","NVGoggles"];
_chainbullets_group    = ["2000Rnd_762x51_M134","200Rnd_762x51_M240","100Rnd_127x99_M2","150Rnd_127x107_DSHKM"];

// Rares
_rares_group = ["ItemVault","ItemBriefcase100oz","ItemLockbox","30m_plot_kit"];
_rare_weapons_group = ["KSVK_DZE","MK_48_DZ","Pecheneg_DZ","M110_NVG_EP1","SCAR_H_LNG_Sniper_SD","M107_DZ","BAF_LRR_scoped"];

// Legendaries
_legend_group = ["PipeBomb","ItemHotwireKit"];
_chainsaw_group = ["Chainsaw","ChainsawB","ChainsawG","ChainsawP","BAF_AS50_scoped"];

MBC_REWARDLIST = [
    //Reward List format:
    //[type,item,quantity,raritylevel,rarity]
    //        type - item type. Available options:
    //            magazine - any type of magazine and most general items (briefcases, cinder blocks, ammunition, etc)
    //            weapon - any type of weapon, note that toolbelt items are also considered weapons in Arma
    //            group_mag - a group of magazines. This is an array of items from which only 1 will be randomly picked
    //            group_wep - a group of weapons. An array of weapons from which only 1 will be randomly picked
    //            group_tool - a group of tools. An array of tools from which only 1 will be randomly picked
    //            coins - this is for Zupa's Single Currency script only. Only use it if you have that script. If you don't do not use coins as a type for reward
    //            script - this is an experimental feature for more advanced users. I haven't tested it thoroughly so use it at your own risk.
    //                It was meant to work as a power-up rather than having an item as a reward. If you use "script" as a type, you must type the script's full path to the "item" field
    //        item - class name of item. If type is group, insert the group's variable. Example: 30m_plot_pole, ItemHotwireKit, _sniper_group, _junk_group
    //        quantity - number of items, set it to 1 if you're using grouping. Example: 15 (in case item is ItemHotwireKit then it will give you 15 Hotwire Kits)
    //        raritylevel - the level of rarity from 1 to 4 (1 = least rare, 4 = rarest), this is just visual for the UI
    //        rarity - how likely this item will be picked in percentage (from 0 to 100)
    //            Note: total sum of rarity must equal 100
    
    // Bad luck (junk items with low possibility)
     ["group_mag",_junk_group,1,1,2]
    
    // Common
    ,["group_wep",_assault_group,1,2,6]
    ,["group_wep",_lmg_group,1,2,8]
    ,["group_wep",_sniper_group,1,2,6]
    ,["group_mag",_military_group,1,2,2]
    ,["group_mag",_medical_group,5,2,2]
    ,["group_mag",_vehicle_repair_group,2,2,2]
    ,["group_mag",_common_group,1,2,6]
    ,["group_mag",_chainbullets_group,5,2,4]
    ,["group_tool",_tools_group,1,2,6]
    ,["coins","Coins",2500,2,7]
    ,["coins","Coins",3000,2,6]
    ,["coins","Coins",5000,2,4]
    ,["magazine","ItemGoldBar10oz",3,2,5]
    ,["magazine","PartPlywoodPack",15,2,5]
    ,["magazine","PartPlankPack",15,2,5]
    
    // Rare
    ,["group_wep",_rare_weapons_group,1,3,3]
    ,["group_mag",_rares_group,1,3,3]
    ,["magazine","ItemGoldBar10oz",6,3,2]
    ,["coins","Coins",10000,3,2]
    ,["magazine","CinderBlocks",15,3,3]
    ,["magazine","PartPlywoodPack",30,3,2]
    ,["magazine","PartPlankPack",30,3,2]
    ,["magazine","ItemPole",30,3,2]
    
    // Legendary
    ,["group_wep",_chainsaw_group,1,4,1]
    ,["group_mag",_legend_group,1,4,1]
    ,["magazine","ItemBriefcase_Base",1,4,1]
    ,["coins","Coins",20000,4,1]
    ,["coins","Coins",50000,4,1]
];

 

Updated open_brief.sqf

 

disableSerialization;

private ["_item","_spawnCrate","_crateName","_pos","_crateClass","_dir","_selectDelay","_inVehicle"];

(findDisplay 106) closedisplay 0;
closeDialog 0;

_inVehicle = (vehicle player) != player;
if(_inVehicle) exitWith {
    cutText [format["You cannot open %1 in a vehicle.", MBT_NAME] , "PLAIN DOWN"];
};

player playActionNow "Medic";

r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
_briefSoundPlay = false;
_briefSoundCount = 0;

while {r_doLoop} do {
    _animState = animationState player;
    _isMedic = ["medic",_animState] call fnc_inString;
    _briefSoundCount = _briefSoundCount + 1;
    if (_briefSoundCount > 10 && !_briefSoundPlay) then { //Just to delay the sound a bit
        [objNull, player, rSAY, "Brief_Open_Sound", 30] call RE;
        _briefSoundPlay = true;
    };
    if (_isMedic) then {
        _started = true;
    };
    if (_started and !_isMedic) then {
        r_doLoop = false;
        _finished = true;
    };
    if (r_interrupt) then {
        r_doLoop = false;
    };
    sleep 0.1;
};
r_doLoop = false;

if (!_finished) exitWith {
    r_interrupt = false;
    if (vehicle player == player) then {
        [objNull, player, rSwitchMove,""] call RE;
        player playActionNow "stop";
    };
    cutText [format["Opening %1 cancelled.",MBT_NAME] , "PLAIN DOWN"];
};

if (_finished) then {

    private ["_dialog","_cashToAdd","_canContinue"];
    mbc_rewardlist_temp = [];
    _canContinue = false;

    _item = "ItemBriefcase_Base";

    if (_item in magazines player) then {
        player removeMagazine _item;
        _canContinue = true;
    };
    
    if (!_canContinue) exitWith { //Anti-duping
        cutText [format["Opening %1 failed.", MBT_NAME] , "PLAIN DOWN"];
    };

    _crateClass = "USOrdnanceBox";

    _dir = getdir player;
    _pos = getposATL player;
    _pos = [(_pos select 0)+1*sin(_dir),(_pos select 1)+1*cos(_dir), (_pos select 2)];

    _spawnCrate = _crateClass createVehicleLocal _pos;

    _spawnCrate setDir _dir;
    _spawnCrate setposATL _pos;
    
    clearWeaponCargoGlobal _spawnCrate;
    clearMagazineCargoGlobal _spawnCrate;
    clearBackpackCargoGlobal _spawnCrate;
    
    _lootRandomizer = [];
    
    //Let's crate an array to randomize loot depending on rarity
    {
        private ["_forEachTempIndexNo"];
        _forEachTempIndexNo = _forEachIndex;
        for "_i" from 1 to (_x select 4) do {
            _lootRandomizer set [count _lootRandomizer, _forEachTempIndexNo];
        };
    } forEach MBC_REWARDLIST;
    
    Sleep 0.2;

    for "_i" from 1 to 6 do {
        private ["_loot","_lootIndex","_lootType"];
        _loot = [];
        _lootIndex = _lootRandomizer call BIS_fnc_selectRandom;
        _loot = + MBC_REWARDLIST;
        _loot = _loot select _lootIndex;
        _lootType = _loot select 0;
        
        //Let's pick the random items out of groups right away, so we can properly display it on the UI
        switch (_lootType) do {
            case "group_wep": {
                Sleep 0.2;
                _groupingArray = _loot select 1;
                _weapon = _groupingArray call BIS_fnc_selectRandom;
                _loot set [1, _weapon]; // Random weapon
                _loot set [2, (1 + floor(random 4))]; // Random amount of mags
            };
            case "group_tool": {
                Sleep 0.2;
                _groupingArray = _loot select 1;
                _tool = _groupingArray call BIS_fnc_selectRandom;
                _loot set [1, _tool]; // Random tool
            };
            case "group_mag": {
                Sleep 0.2;
                _mag = (_loot select 1) call BIS_fnc_selectRandom;
                _loot set [1, _mag]; // Random item
            };
        };
        mbc_rewardlist_temp set [count mbc_rewardlist_temp, _loot];
        _loot = [];
    };
    
    UpdateMBCDialog = {
        {
            private ["_pic","_text","_itemName","_qty","_addInfo"];
            
            ctrlSetText [81401, MBT_DIALOG_TITLE];
            ctrlSetText [81402, MBT_DIALOG_CLAIM];
            ctrlSetText [81403, MBT_DIALOG_NOTE];
            
            _addInfo = "";
            switch (_x select 0) do {
                case "group_wep": {
                    _pic = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'picture');
                    _itemName = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'displayName');
                    _qty = _x select 2;
                    _text = format["%1\n+%2 magazines", _itemName, _qty];
                };
                case "group_tool": {
                    _pic = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'picture');
                    _itemName = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'displayName');
                    _text = format["%1", _itemName];
                };
                case "group_mag": {
                    _pic = getText (configFile >> 'CfgMagazines' >> _x select 1 >> 'picture');
                    _itemName = getText (configFile >> 'CfgMagazines' >> _x select 1 >> 'displayName');
                    _qty = _x select 2;
                    if (_qty > 1) then {
                        _addInfo = format["\nx %1",_qty];
                    };
                    _text = format["%1%2", _itemName, _addInfo];
                };
                case "coins": {
                    _pic = getText (configFile >> 'CfgWeapons' >> 'EvMoney' >> 'picture');
                    _qty = _x select 2;
                    _text = format["%1 %2", _qty call BIS_fnc_numberText, _x select 1];
                };
                case "weapon": {
                    _pic = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'picture');
                    _itemName = getText (configFile >> 'CfgWeapons' >> _x select 1 >> 'displayName');
                    _qty = _x select 2;
                    if (_qty > 1) then {
                        _addInfo = format["\nx %1",_qty];
                    };
                    _text = format["%1%2", _itemName, _addInfo];
                };
                case "magazine": {
                    _pic = getText (configFile >> 'CfgMagazines' >> _x select 1 >> 'picture');
                    _itemName = getText (configFile >> 'CfgMagazines' >> _x select 1 >> 'displayName');
                    _qty = _x select 2;
                    
                    if((_x select 1) == "ItemBriefcase_Base") then {
                        _itemName = MBT_NAME;
                    };
                    
                    if (_qty > 1) then {
                        _addInfo = format["\nx %1",_qty];
                    };
                    _text = format["%1%2", _itemName, _addInfo];
                };
                case "script": {
                    _pic = "";
                    _text = _x select 1;
                };
            };
            
            ctrlSetText [81201 + _forEachIndex, _pic];
            ctrlSetText [81301 + _forEachIndex, _text];
            
            _display = findDisplay 81000;
            _frame_ctrl = _display displayCtrl 81101 + _forEachIndex;
            _text_ctrl = _display displayCtrl 81301 + _forEachIndex;
            
            switch (_x select 3) do {
                case 1: {
                    _frame_ctrl ctrlSetTextColor [0.6,0.6,0.6,0.5];
                    _text_ctrl ctrlSetTextColor [0.6,0.6,0.6,0.5];
                };
                case 2: {
                    _frame_ctrl ctrlSetTextColor [1,1,1,0.5];
                    _text_ctrl ctrlSetTextColor [1,1,1,0.5];
                };
                case 3: {
                    _frame_ctrl ctrlSetTextColor [0.93,0.79,0,0.9];
                    _text_ctrl ctrlSetTextColor [0.93,0.79,0,0.9];
                };
                case 4: {
                    _frame_ctrl ctrlSetTextColor [0.83,0.29,0.41,1];
                    _text_ctrl ctrlSetTextColor [0.83,0.29,0.41,1];
                };
            };
        } forEach mbc_rewardlist_temp;
    };

    Sleep 0.2;
    _dialog = createdialog "MBC_DIALOG";
    call UpdateMBCDialog;
    waitUntil { !dialog };

    cutText [format["You have opened a %1",MBT_NAME],"PLAIN DOWN"];
    
    Sleep 0.2;
    
    _cashToAdd = 0;
    
    {
        private["_magazines","_magazineClass","_currentMoney"];
        switch (_x select 0) do {
            case "group_wep": {
                _spawnCrate addWeaponCargoGlobal [_x select 1, 1];
                _magazines = getArray (configFile >> "CfgWeapons" >> _x select 1 >> "magazines");
                if (count _magazines > 0) then
                {
                    _magazineClass = _magazines select 0;
                    _spawnCrate addMagazineCargoGlobal [_magazineClass, _x select 2];
                }
            };
            case "group_tool": {
                _spawnCrate addWeaponCargoGlobal [_x select 1, 1];
            };
            case "group_mag": {
                _spawnCrate addMagazineCargoGlobal [_x select 1, _x select 2];
            };
            case "coins": {
                _cashToAdd = _cashToAdd + (_x select 2);
            };
            case "weapon": {
                _spawnCrate addWeaponCargoGlobal [_x select 1, _x select 2];
            };
            case "magazine": {
                _spawnCrate addMagazineCargoGlobal [_x select 1, _x select 2];
            };
            case "script": {
                [_x select 2] execVM _x select 1;
            };
        };
        Sleep 0.1;
    } forEach mbc_rewardlist_temp;
    
    if (_cashToAdd > 0) then {
        _currentMoney = player getVariable["cashMoney",0];
        player setVariable["cashMoney",_currentMoney + _cashToAdd, true];
    };
    
    PVDZE_plr_Save = [player,(magazines player),true,true] ;
    publicVariableServer "PVDZE_plr_Save";
    
    sleep MBT_CRATEDELAY;
    deletevehicle _spawnCrate;

};

 

Furthermore i've changed the player_traderMenuHive.sqf to show the name of the item properly in the trader menu.

 

Find

        _index = lbAdd [TraderDialogItemList, format["%1 (%2)", _textPart, _name]];

Replace with

        if(_name == "ItemBriefcase_Base") then {
            _index = lbAdd [TraderDialogItemList, MBT_NAME];
        } else {
            _index = lbAdd [TraderDialogItemList, format["%1 (%2)", _textPart, _name]];
        };
Link to comment
Share on other sites

Yep noticed that. Did some more work on the config and added the group_tool option.

 

This is great. Though I never added the tools part because tools are considered as weapons in the game. You should be able to make a tools group with "group_wep". Only difference is that group_wep also generate mags. But it does so only if mags actually exist, so tools should still work fine. But I actually just noticed a little visual error regarding this. I'll update the main branch later today with improved loot tables and the visual fix.
 
As for the player_traderMenuHive part thanks for including that part in as well. I had this in the example video but never included it as part of the release. Thought it'd just make things more complicated for the less-experienced if you don't have a custom player_traderMenuHive.
Link to comment
Share on other sites

Jep did it as a group_wep at first, but it actually finds ammo for some tools (e.g. hatchet), so that showed a little ugly. Couldn't have that in an otherwise perfect GUI :)

 

--

Since there are also _Base classes for silver and copper briefcases, how about adding those aswell? You could use them to make themed packs or silver / bronze packs with less slots.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Discord

×
×
  • Create New...