Jump to content

NGHD

Member
  • Posts

    172
  • Joined

  • Last visited

Posts posted by NGHD

  1. No idea on that one. What edited files does it have in common with my script?

     

    When you say that the calls never seemed to work for you, it might be time to step back and re-introduce everything you are trying to do. A big thing when starting a server is writing down a list of every overwritten/modified file you are using. That way you can plan ahead and see what potential conflicts you are about to create when you add your next mod. As far as your particular issue I followed Calamity's fix on a fresh install with no problems.

    the zupas bank and stuff has its own defines and defines dialog and stuff and it calls it in as duplicate with your script so i cant use it :( could you edit it up i dont really get how incase i break it 

  2.  

    Hello Epoch forums!
    I was working on a custom crafting system when I found Raymix's Emerald Interiors. 
    I really liked what he had in his system but saw that he was no longer working on it or updating it. My system had a menu but didn't have many items in it so I talked to him about using his item lists and bringing out an in depth crafting system with tons of items. Where my old system had 77 items, and his had 193, this new system has over 550! The name of this mod came from a couple users asking how in the world can you make a bed out of a Ruby and someone said Alchemy!
     
    So what does this add that other systems do not? An easy to use interface that also includes a preview function so players can tell the difference between MAP_Misc_Well and Land_Misc_Well_C before they run out and scavenge materials to make them. I also tried to add realistic ingredient and tool lists to most items but for most of the misc or small items I went with just a gemstone and/or gold costs. The main reason I added the extra costs was to limit players from having hundreds of these items all over the map as they do save to the database like Epoch craftables. I wanted this to be something more for player's to work towards. On our server we have a rather large Sector B mission that unfolds in three stages and the rewards at the end include gemstones. While we have a gem trader to buy and sell the gems it seemed like a waste to have nothing else to do with the gemstones.
     
    Demonstration Videos:
    Where I live is very loud with traffic and outside noise so they have music instead of me talking. If you don't care for heavy metal you may want to mute your speakers :)
    This video is of v1.3 so there are many more items included now but I kept the general categories for each gemstone the same.
     
    Demo of the menu system itself:
    I re-purposed an old UAV script I had written a while back for vanilla Arma 2 for the preview function
     
    Installation guide:
     
    PLEASE DO NOT SKIP THE CONFLICTS SECTION!
     
    Multiple people in this thread have run into issues with certain parts of my script causing problems for other scripts like Snap Pro and Deploy anything and the fixes are currently listed in the conflicts sections. 
     
    Assumptions in this guide:
    You have a basic understanding of scripting for Arma2. 
    You are familiar with using custom files and overriding values via script. If you do not use any of the listed below files you will need to use Google to find out how to unpack your pbos and utilize these custom files. 
     
    STEP 1.
    Create a folder in your mission folder called custom if you do not already have one. 
    Download the attached file, (Buildables.zip). Unzip and place the Buildables folder into your custom folder.
     
    STEP 2.
    Changes you need to make to your files:

     
    2.a   INIT.SQF
    find 
    call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";
     
    and add the following line underneath it
    call compile preprocessFileLineNumbers "custom\Buildables\variables.sqf";
     
    find 
    call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";
     
    and add the following line underneath it
    call compile preprocessFileLineNumbers "custom\Buildables\Crafting_Compiles.sqf";
     
     
    2.b   DESCRIPTION.EXT
     
    add these lines to the very bottom of the file
     
    #include "custom\Buildables\extra_rc.hpp"
    #include "custom\Buildables\MT_Defines.hpp"
    #include "custom\Buildables\Crafting_Defines.hpp"
    #include "custom\Buildables\Crafting_Dialogs.hpp"
     
     
    2.c   fn_selfActions.sqf 
    This step will allow your players to remove items they craft just like they can currently remove Epoch items. If they die, they will no longer be able to remove them. 
     
    find:
     
    _isModular = _cursorTarget isKindOf "ModularItems";
     
    and change that entire line to:
    _isModular = (_cursorTarget isKindOf "ModularItems") or ((typeOf _cursorTarget) in Custom_Buildables);
     
    If you do not have a custom fn_selfActions.sqf you can find the code here:

    https://github.com/vbawol/DayZ-Epoch/blob/master/SQF/dayz_code/compile/fn_selfActions.sqf

     
    Copy the code on the above page, make the changes I showed and save it into a file called fn_selfActions.sqf in the custom folder you made in STEP 1.
    The crafting_compiles.sqf that I have included already has a call to fn_selfActions so if you are including this code into your already used version of that file you will need to remove that reference or it will cause issues with one or the other overwriting definitions.
     

     
    Antihack edits:
    If you do not use BE filters you can skip STEP 2.d and if you do not use Infistar Antihack you can skip STEP 2.e.
    Step 2.d keeps players from being kicked when they attempt to create an item with box in it's name. Step 2.e will allow your admins to use Infistar's base delete tool to remove items crafted with this system as well as the Epoch items. 
     

     
    2.d   BE Filter BattlEye\createvehicle.txt
     
    find 
    5 "box" !="DebugBoxPlayer_DZ"
     
    add
     
    !="MAP_Misc_PostBox" !="MAP_phone_box" !="MAP_Camo_box" !="MAP_phonebox" !="MAP_icebox" !="MAP_box_c" !="Land_Misc_ConcBox_EP1" 
     
    immediately after "box"
     
    (if you use Infistar Antihack)
    UPDATE: As of Infistar version AH0333A this next part is no longer needed. If you are using a version of Infistar that was released before August 5th, 2014 you will still need to follow this step. With the newer version, Infistar has changed the base delete tool to find all objects within the radius you selected that are part of the dayz allowables list. Since my script adds all of the custom buildables to dayz allowables they will be picked up by default.
    2.e AH.sqf
     
    Find 
    fnc_findObjects =
    {
    _objectClasses =
    [
    various items
    ];
     
    ADD this line below the _objectClasses definition:
     
    _objectClasses = _objectClasses + Custom_Buildables;
     

     
    You are now ready to get crafting! 
     
    User guide:

    BASIC USAGE:
     
    To get started with this system just right click any gemstone or the ItemLightBulb and a small menu action appears that says Start Crafting! Clicking 'Start Crafting!' will open up a graphical menu showing you a drop down box called Category. Using the drop down box will show you all of the categories of items available for that base item, (see below for complete list of categories). Once a category is selected a list of items will populate the items box. You can select any item from that list and it will show you which tools and materials are required to craft that item. If you have the tools/materials in your inventory they will appear green in the list and if you do not have them they will appear red. 
     
    You can click the Preview button to open a new window with camera controls that allows you to move all around the item in question. You can move the camera up or down, zoom in or out and spin the camera around in either direction faster by repeatedly hitting either SPIN button. You can also hit the opposite SPIN button to slow down the item or even stop it. Hitting any key on your keyboard will exit this screen or you can click the Return button to go back to the main crafting menu.
    Clicking the Craft button will attach the item to the player just like regular crafting but with one addition. You can use the 1 and 3 number keys above QWERTY to spin the item in 22.5 degree increments. You can still use Q and E to flip the items around like you normally would with Epoch buildables.
     
    ADVANCE USAGE:
     
    If you are an admin and want to use this without any material, tool or plot pole requirements you can go into custom\Buildables\variables.sqf and add your playerUID to the Admin_Crafting section, (line 7). That file also contains all of the category definitions that various Epoch routines utilize. I wanted to compartmentalize each thing to make it easier to find a particular item as there are a lot of things in these lists. If you want to remove an item from the menu you will need to delete it from its relevant section here and also from the same section in MT_Defines.hpp. For instance, if you don't want your players to be able to create Land_Fort_Watchtower_EP1 because that building spawns loot on your server you can just delete that item from those two locations and it will no longer show up. Please be aware that if you decide to remove an entire Category you will need to also edit the relevant gemstone.sqf as well as the two previously mentioned files. 
     
    If you want to allow your players to craft these items without tool or material requirements other than the base gem that it uses, I have included a file called ALT_MT_Defines.hpp that you can use. Just rename it MT_Defines.hpp and overwrite the one located in the custom\Buildables folder. If you don't need it you can just delete ALT_MT_Defines.hpp.
     

     
    Item categories you can craft:

    Amethyst : Signage
    Billboards
    Sandwich Board Signs
    Helipads
    Informational Sings
    Misc Road Signs
    Misc Signs General
    Traffic Signs
     
    Citrine : Interior Items non-furniture
    Appliances
    Bathroom
    Commercial Items
    Electronics
    Floor Coverings
    Misc Interior (small items)
    Pictures
     
    Emerald : Exterior Items
    Barrels
    Cargo Containers
    Construction Site Items
    Misc Large Exterior Items
    Misc Small Exterior Items
    Scaffolding
    Sunshades
     
    Lightbulbs :
    Individual Light sources (as seen in the above video)
    Light Poles
    Smaller Fixtures
     
    Obsidian : Items from the ground
    Bushes
    Small Plants
    Small Trees
    Medium Trees
    Large Trees
    The Dead (highlighted in above video)
    Water Wells
     
    Ruby : Interior Items Furniture
    Beds
    Benches
    Cabinets
    Chairs
    Desks
    Shelves
    Tables
     
    Sapphire : Flags w/poles
    Nation's Flags
    Organizations Flags
    Medical Flags
    Plain Color Flags
    Misc Flags
     
    Topaz : Base Defense
    Defenses
    Forts
    Tents
    Towers (there is only one tower at this point as the ladders on the rest were not working so I removed them)

     
    Notes on possible conflicts with the included files:

    This system uses several edited files that may conflict with things you already have on your server. If you are already using Maca's right click script for example you will need to combine your Extra_RC.hpp with mine so that the base extrarc class contains everything you need it to. I did this so server operators wouldn't have to include yet another change to their compiles.sqf. If you already have player_selectSlot redefined in your compiles.sqf you will need to delete that line of code inside my Crafting_Compiles.sqf. 
     
    If you use DRNSpawn on Taviana, Epoch Admin Tools or any other addon that uses custom dialogs you may get errors for duplicate definitions in the Crafting_Defines.hpp. You will need to decide which one you want to utilize on your server and delete the other definition. For example, DRNSpawn has its own defines, one of which is rscButton. If you choose to delete one of my definitions, please be aware that it could change the appearance from what you see in the above video. I have attempted to ensure that each of my dialog controls has a fairly useful and unique name so there shouldn't be any conflicts but if there are, please let me know what mod it is and I will try to make a fix for it if you are unable.
     
    Thank you to NetShark for his reported conflict with Epoch Admin Tool. To fix the conflict between that and my mod you will need to delete the definition for RscListBox in my Crafting_Defines.hpp. Deleting lines 122 through 161 will remove the conflicting definition.
     
    I also have redefined a custom dayz_spaceInterrupt in my Crafting_Compiles.sqf. That section of code is necessary as it not only allows players to spin the item in small increments using the 1 & 3 keys but it also captures any key presses that then trigger the Preview menu to close and return to the main crafting screen. Without that code, any player using the Preview will have to log out if they hit ESC or Backspace as it will simply close out the dialog buttons that allow them to Return and leave them staring at the item. 
     
    I do not use Plot for Life so I do not know what may or may not conflict with that addon while using this addon. My system does utilize a custom player_build and does check for plot poles so if you are using that plot pole addon you may need to edit the custom_builds.sqf.
    I have not tested the below code but it was submitted by StiflersM0m as a fix for plotforlife. I included it here as a quick ref for anyone reading this first before immediately downloading.

     

     
     
    Thank you to stiflersM0M and emwilsh for the heads up on Snap Pro. Thank you also to Stranger for pointing out a couple typos that might have hemmed some of you up. If you are using Snap Pro system you can integrate my system with that one by opening my Crafting_Compiles.sqf and deleting the dayz_spaceinterrupt function from the bottom of that file. This function starts on line 256. Delete everything from line 256 to the end of the file. Then navigate to custom\Snap_Pro\dayz_spacensterrupt.sqf and open that file.
     
    You will need to add 
     
    GlobalPreviewVariable = 1;
     
    into the empty space on line 3.
     
    And near the very bottom, you need to add
     
    // num 1 or 3 above qwerty
    if (_dikCode == 0x02) then {
    AAC_1 = true;
    };
    if (_dikCode == 0x04) then {
    AAC_3 = true;
    };
     
    just BEFORE\ABOVE the line
     
    _handled
     
     
     
    I disabled the functionality of the 2 button for now as what I wanted it to do isn't working. Adding those two things to Raymix's dayz_spaceinterrupt.sqf will stop the conflicts between the two systems.
     
    If you find any other addons that conflict with this one please let me know and I will add them to this section. I may not have the time to test out or work out a fix but I will include any issues and fixes that you guys come up with in this section.

     
    Known Issues:

    There are two issues while using this addon. One is that some items, like the helipads, cannot be removed by the player. This is due to the way the models are created and they do not have a point for the cursor to look at that will register the player actually looking at it. When a player looks at an SUV the game knows what the player is looking at and various actions can be taken. With certain items in this list there just isn't a point that works so they will have to be removed by an admin using Infistar base deletion or manually deleted from the database. If you do not want to be bothered with having to do this you will need to remove the helipads from the included files. Helipads are also designed to only exist at ZERO altitude so they cannot be placed on metal floors and will not show up in the Preview window.
     
    The other issue is with crafting some of the larger items like the Fortifications. If a player begins using alt-pg up to move the item up multiple times it can catch their feet. If this happens it will propel itself a feet into air and eventually will disappear due to having moved more than 5m. This will leave your player hanging in the air only to drop to the ground and possibly die. Basically it moves the item up, but because the player is now higher than they were it moves the item up again and keep going. Because the offsets on those forts are already so big, I didn't want to push them out even further as it very well could allow a player to place half the fortification outside of the plot pole area which could lead to a lot of other issues for that player, (with other players building into their structure). This only happens with the CDF_WarfareBBarracks, USMC_WarfareBBarracks and the WarfareBDepot as the models for them include the dirt surrounding them. If you feel that you don't want to deal with this rare bug you can simply remove those three from the list. I left them, along with the helipads, in this mod as those were some of the most asked about items on our server while I was developing this.

     
    NEW! HOW TO ADD NEW CATEGORIES!

    So you want to add even more to this system? I am currently working on adding around another 120 items to the system including Carports, Walls and a few other categories. If you wanted to add something I didn't plan on adding, (like mounted guns for instance), you will need to add code in three different files.
    But first a word of warning, please do not follow this section exactly. Seriously. You will get your players banned for trying to enter vehicles that your anti-hacks don't like. You may even open a black hole and cause the universe to be swallowed up. IF you already allow mounted weapons to be used by players on your server and you have already gone through the steps to make sure players don't get banned with the anti-hack script you are using AND you're feeling really lucky, then proceed. But follow this section at your own risk. I will not be providing support for anything in this section and only offer it as a what if for people who are feeling brave and because a forum user specifically asked about this category. Also, the class names I am using below are off the top of my head and may be incorrect. This part is meant to be more of an abstract concept than an exact how to. It should be modified to suit the items you are looking to include. You can very easily change the wording below to add houses as well if you wanted to. Please make a backup file of each of the changes you make. As I said above, I will be updating this with some new items soon and a backup will make it a little easier to get your new items in if you choose to update this system later.
     
    1. MT_Defines.hpp
    Near the top of that file please note the Default class. This is the base class that adds in a generic offset and required tools and materials. There is also a large section of information in that class that has been commented out that lists various tools and materials that you can use for reference when adding a new category type. For this part of the tutorial I will be adding Mounted_Guns within the Topaz family of types, (Topaz is the base defense gemstone), so my only required material will be one gem and the only required tool will be the toolbox. You can use that section at the top to add up to four required tools and up to twelve required materials, (the gemstone plus eleven other things). Any more than those two numbers and they will not display inside the crafting menu.
     
    Below the Default class you will see all the other classes that are based off of Default. At the bottom of that section, just ABOVE the commented out lines
     
    //# Total Items
    //Topaz - Base Defense
     
    you will need to add
     
    class DefaultMountedWeapons:Default {
    offset[]={0,7,0};
    requiredtools[] = {"ItemToolbox"};
    requiredmaterials[] ={"ItemTopaz"};
    };
     
    We now have our base class that will tell all of our mounted weapons what tools and materials to use.
    Scroll down until you see
     
    //Emerald - Exterior Items
     
    ABOVE that line we need to build our new class. Add the following section ABOVE that commented out line:
     
    class MountedWeapons:DefaultMountedWeapons {
    class AGS_Ins:DefaultMountedWeapons{};
    class D30_Ins:DefaultMountedWeapons{};
    class M2StaticMG:DefaultMountedWeapons{};
    class DSHKM_Ins:DefaultMountedWeapons{};
    };
     
    Keep that file open as we will be returning to it in just a minute.
     
    2. custom\variables.sqf 
    Open my custom variables.sqf and find
     
    //Topaz - Base Defenses
     
    Right underneath that line we need to add whatever we defined in MT_Defines.hpp as an array that will be added to the _Topaz array. So, right under that commented out line add:
     
    _Mounted_Weapons =["AGS_Ins","D30_Ins","M2StaticMG","DSHKM_Ins"];
     
    Then find 
     
    _Topaz = _Bridges + _Defenses + _Forts + _Tents + _Towers + _Walls;
     
    and change it to 
     
    _Topaz = _Mounted_Weapons + _Bridges + _Defenses + _Forts + _Tents + _Towers + _Walls;
     
    Now our dayz_allowedObjects, DZE_maintainClasses and Custom_Buildables will all be updated with our new items.
     
    3. Topaz.sqf
    Find this bit of code:
    forEach [
    "Defenses",
    "Forts",
    "Tents",
    "Towers"
    ]; 
     
    We need to insert a blank line before the closing ]; and add whatever we called our base class in MT_Defines.hpp. Make sure to add a comma after "Towers" as well. In this case we will need to add
    "MountedWeapons"
     
    that sections should look like this now:
     
    forEach [
    "Defenses",
    "Forts",
    "Tents",
    "Towers",
    "MountedWeapons"
    ];
     
    Now look further below in that file and find the line:
     
    default{};
     
    Add this bit of code right ABOVE the default line:
     
    case 4:
    {
    ComboBoxResult="MountedWeapons";
    call fnc_Load_Items;
    };
     
    The changes to this file will allow the MountedWeapons category to appear in the drop down box when using an ItemTopaz for crafting. It will also launch the function that fills the Items box and tell that function what items to load. If you didn't destroy the universe, congratulations!

    I spent a lot of time on the offsets for these items to ensure that the item was at a good distance from the player, but if you find something that could be better, please post the item and offset below. Many items that are grouped together have similar offsets and I did that to cut out a few thousand lines of code from the MT_Defines.hpp. In some cases this means an item may be a little closer or further than what would be perfect, but when you look at everything in the group it makes sense to that group. In some cases like the Topaz items, many items have their own definitions.
     
    I have been running this on a Cherno server with just Epoch as well as an Origins Epoch server that just used the Origins map and vehicles without issues. If you do find you are having trouble with this on another map, just let me know and I will do what I can to help you out. It works with edited BE filters and Infistar and is working on both of the above servers with 1.0.5.1/125548. I also had this previously running under 1.0.4.2/112555 and 1.0.5.1/112555. Now that I've tested it out quite a bit I wanted to give v3.3 to the community and hope other people can get some use out it.
     
    Thank you guys for any feedback you can give and if you find an issue or mistake in this guide, please let me know! 
     
    Thank you to:
    Maca for his Right Click script:
     
    Raymix for Emerald Interiors that made me realize that I didn't have to settle on just 10 items in a menu list from maca's right click script
     
    vbawol for all his awesome work on getting Epoch out there in the first place
     
    [GOM] Simbo for helping me test this out and getting a lot of the earlier bugs out of the way.
     
    [AFLA] Rick Grimes for helping me test this out on other maps and getting the delete sorted.
     
    [OG] Kenshinz and everyone at Origins Gaming Server for helping to test this in a live environment.
    You can find my system currently running on his server at : 192.99.16.15:2372

     

    How do i get this to work with Zupa's coin system please help?

  3. I do.

    I already released it in the project thread.

     

    playerhud.sqf

    disableSerialization;
    
    // player setVariable["AsReMixhud", true];//Variable Show/Hide HUD Support for control player hud
    
    AsReMixhud_Control = true; // player getVariable["AsReMixhud",true];
    
    
    while {true} do
    {
        1000 cutRsc ["AsReMixhud","PLAIN"];
        _wpui = uiNameSpace getVariable "AsReMixhud";
        _vitals = _wpui displayCtrl 4900;
    	
    	_thePlayer = player;
    	AsReMixhud_headshots 		= _thePlayer getVariable["headShots",0];
        Zupa_bank 		=  _thePlayer getVariable["bank",0];
    	
        
    
    	//if(AsReMixhud_humanity >= 5000) then { AsReMixhud_hmnicon = "<img size='0.8' image='addons\playerhud\icons\As_hmhero.paa'/>"; };
    	//if((AsReMixhud_humanity >= 200) && (AsReMixhud_humanity <= 4999)) then { AsReMixhud_hmnicon = "<img size='0.8' image='addons\playerhud\icons\As_hmcivil.paa'/>"; };
    //	if(AsReMixhud_humanity <= 199) then { AsReMixhud_hmnicon = "<img size='0.8' image='addons\playerhud\icons\As_hmbandit.paa'/>"; };
    	
    	_vitals ctrlSetStructuredText parseText format ["
    		<t size='0.9'> %1 </t><img size='0.8' align='right' image='addons\playerhud\icons\dollars.paa'/>   <br/>",
    	[AsReMixhud_headshots] call BIS_fnc_numberText,//1
    	Zupa_bank//2
    	];
    	_vitals ctrlCommit 0;
            
        sleep 2;
    };
    
    

     

    hud.hpp

    /*
    	AsReMix Player HUD File - Zupa Single Currency Edit - Lots of thanks to AsRemix.
    */
    
    #define hud_status_idc 4900
    
    
    class AsReMixhud {
    	idd = -1;
        fadeout=0;
        fadein=0;
    	duration = 20;
    	name= "AsReMixhud";
    	onLoad = "uiNamespace setVariable ['AsReMixhud', _this select 0]";
    	
    	class controlsBackground {
    
    		class AsReMixhud_Status:Hw_RscText
    		{
    			idc = hud_status_idc;
    			type = CT_STRUCTURED_TEXT;
    			size = 0.040;
        x = safezoneX + (safezoneW -0.365) ;
    	y = safezoneY + 0.465 * safezoneW;
    			w = 0.35; h = 0.35;
    			colorText[] = {1,1,1,1};
    			lineSpacing = 3;
    			colorBackground[] = {0,0,0,0};
    			text = "";
    			shadow = 2;
    			class Attributes {
    				align = "right";
    			};
    		};
    
    	};
    };
     

     

     
     

    Also I did a quite of few customization to it and made it so that its possible to remove coins and made it work with Soul's custom hive as well.

    WOW Thank you so much you dont know how much i love you for it :)

  4. Here ya go

    disableSerialization;

    // player setVariable["AsReMixhud", true];//Variable Show/Hide HUD Support for control player hud

    AsReMixhud_Control = true; // player getVariable["AsReMixhud",true];

    while {true} do

    {

    1000 cutRsc ["AsReMixhud","PLAIN"];

    _wpui = uiNameSpace getVariable "AsReMixhud";

    _vitals = _wpui displayCtrl 4900;

    _thePlayer = player;

    AsReMixhud_headshots = _thePlayer getVariable["headShots",0];

    Zupa_bank = _thePlayer getVariable["bank",0];

    _vitals ctrlSetStructuredText parseText format ["

    %1

    %2

    ",

    AsReMixhud_headshots,//1

    Zupa_bank//2

    ];

    _vitals ctrlCommit 0;

    sleep 2;

    };

    i replaced my whole playerhud.sqf with thsi code and it doesnt work :( i get no images could you give me your playerhud.sqf plz :)

  5. This should work to show only the coins, change your playerHud.sqf to

    disableSerialization;

    // player setVariable["AsReMixhud", true];//Variable Show/Hide HUD Support for control player hud

    AsReMixhud_Control = true; // player getVariable["AsReMixhud",true];

    while {true} do

    {

    1000 cutRsc ["AsReMixhud","PLAIN"];

    _wpui = uiNameSpace getVariable "AsReMixhud";

    _vitals = _wpui displayCtrl 4900;

    _thePlayer = player;

    AsReMixhud_headshots = _thePlayer getVariable["headShots",0];

    _vitals ctrlSetStructuredText parseText format ["

    %1

    ,

    AsReMixhud_headshots,//1

    ];

    _vitals ctrlCommit 0;

    sleep 2;

    };

    as for the size of the image, I'm unsure what setting to change

    Ive Replaced everything in my hud.sqf and it hasnt worked there is no icon :( all the icons are gone

×
×
  • Create New...