- Reaction score
- 534
It is time for you to make your own shops.
In this tutorial, you will also learn how to make the shops sell the items you want, and block the rest. Let's put a normal shop, then a secret shop.
Normal shop
Go into your prefabs tab, and find the shop_keeper_radiant.vmap entity. Place it where you want in your map. The huge yellow area around it defines where the heroes will be able to buy items around the shop.
Select it, and set the Shop Type to "Home".
Secret shop
Again, go into your prefabs tab, and select a shop. Let's pick shop_tower.vmap, and place it into the map. Select it, and change its Shop Type to "Secret".
Now that this is done, we need to tell the game what's in our shops, because we aren't making a default Dota 2 map.
Editing the shops
First, we need a text file, at the right place. Here is the path it should go:
As usual, replace "zergling_madness" with the name of your addon.
Now, let's edit it. Empty, it looks like this:
And then, you add items in each category until you're satisfied with what the shop is selling. This is an example shop from the Valve example map, holdout:
You simply list the items you want in each category. Not complicated, huh?
Marking items as non-purchasable
Unfortunately, even if an item isn't featured in one of your shop, it might still be purchasable if the user searches for it in shop tab. Therefore, something has to be done to prevent this. This is done via the npc_abilities_override.txt file. Here is where it should be located:
where zergling_madness is the name of your addon. The next step is to list the items we want removed from our shop. In the following list, every item in the default game except blink dagger and item recipes (which are useless anyway) have been made impossible to purchase in the map:
Furthermore, they shouldn't even show up if the user searches for them in the shop tab.
Additional detail for secret shop items
Custom items intended to be sold from the secret shop need an additional setting. Under your custom item in npc_items_custom.txt, those 2 lines need to be added:
Otherwise, the item will go directly into your stash on purchase.
In this tutorial, you will also learn how to make the shops sell the items you want, and block the rest. Let's put a normal shop, then a secret shop.
Normal shop
Go into your prefabs tab, and find the shop_keeper_radiant.vmap entity. Place it where you want in your map. The huge yellow area around it defines where the heroes will be able to buy items around the shop.
Select it, and set the Shop Type to "Home".
Secret shop
Again, go into your prefabs tab, and select a shop. Let's pick shop_tower.vmap, and place it into the map. Select it, and change its Shop Type to "Secret".
Now that this is done, we need to tell the game what's in our shops, because we aren't making a default Dota 2 map.
Editing the shops
First, we need a text file, at the right place. Here is the path it should go:
As usual, replace "zergling_madness" with the name of your addon.
Now, let's edit it. Empty, it looks like this:
Code:
"dota_shops"
{
"consumables"
{
}
"attributes"
{
}
"weapons_armor"
{
}
"misc"
{
}
// Level 1 - Green Recipes
"basics"
{
}
// Level 2 - Blue Recipes
"support"
{
}
"magics"
{
}
// Level 3 - Purple Recipes
"defense"
{
}
"weapons"
{
}
// Level 4 - Orange / Orb / Artifacts
"artifacts"
{
}
"sideshop1"
{
}
"sideshop2"
{
}
"secretshop"
{
}
}
And then, you add items in each category until you're satisfied with what the shop is selling. This is an example shop from the Valve example map, holdout:
Code:
"dota_shops"
{
"consumables"
{
"item" "item_greater_clarity"
"item" "item_flask2"
"item" "item_greater_salve"
"item" "item_tpscroll"
"item" "item_ward_observer"
"item" "item_bottle"
}
"attributes"
{
"item" "item_branches"
"item" "item_gauntlets"
"item" "item_slippers"
"item" "item_mantle"
"item" "item_circlet"
"item" "item_belt_of_strength"
"item" "item_boots_of_elves"
"item" "item_robe"
"item" "item_ogre_axe"
"item" "item_blade_of_alacrity"
"item" "item_staff_of_wizardry"
"item" "item_ultimate_orb"
}
"weapons_armor"
{
"item" "item_ring_of_protection"
"item" "item_quelling_blade"
"item" "item_stout_shield"
"item" "item_blades_of_attack"
"item" "item_chainmail"
"item" "item_helm_of_iron_will"
"item" "item_broadsword"
"item" "item_quarterstaff"
"item" "item_claymore"
"item" "item_javelin"
"item" "item_platemail"
"item" "item_mithril_hammer"
}
"misc"
{
"item" "item_magic_stick"
"item" "item_sobi_mask"
"item" "item_ring_of_regen"
"item" "item_boots"
"item" "item_gloves"
"item" "item_cloak"
"item" "item_gem"
"item" "item_lifesteal"
"item" "item_ghost"
"item" "item_talisman_of_evasion"
"item" "item_blink"
"item" "item_shadow_amulet"
}
// Level 1 - Green Recipes
"basics"
{
"item" "item_wraith_band"
"item" "item_null_talisman"
"item" "item_magic_wand"
"item" "item_bracer"
"item" "item_poor_mans_shield"
"item" "item_soul_ring"
"item" "item_phase_boots"
"item" "item_power_treads"
"item" "item_oblivion_staff"
"item" "item_pers"
"item" "item_hand_of_midas"
"item" "item_travel_boots"
}
// Level 2 - Blue Recipes
"support"
{
"item" "item_ring_of_basilius"
"item" "item_headdress"
"item" "item_buckler"
"item" "item_urn_of_shadows"
"item" "item_ring_of_aquila"
"item" "item_tranquil_boots"
"item" "item_medallion_of_courage"
"item" "item_arcane_boots"
"item" "item_ancient_janggo"
"item" "item_vladmir"
"item" "item_mekansm"
"item" "item_pipe"
}
"magics"
{
"item" "item_force_staff"
"item" "item_necronomicon"
"item" "item_cyclone"
"item" "item_dagon"
"item" "item_veil_of_discord"
"item" "item_rod_of_atos"
"item" "item_ultimate_scepter"
"item" "item_orchid"
"item" "item_refresher"
"item" "item_sheepstick"
"item" "item_slippers_of_halcyon"
}
// Level 3 - Purple Recipes
"defense"
{
"item" "item_hood_of_defiance"
"item" "item_blade_mail"
"item" "item_vanguard"
"item" "item_soul_booster"
"item" "item_black_king_bar"
"item" "item_shivas_guard"
"item" "item_manta"
"item" "item_bloodstone"
"item" "item_sphere"
"item" "item_assault"
"item" "item_heart"
}
"weapons"
{
"item" "item_lesser_crit"
"item" "item_armlet"
"item" "item_basher"
"item" "item_invis_sword"
"item" "item_bfury"
"item" "item_ethereal_blade"
"item" "item_radiance"
"item" "item_monkey_king_bar"
"item" "item_greater_crit"
"item" "item_butterfly"
"item" "item_rapier"
"item" "item_abyssal_blade"
}
// Level 4 - Orange / Orb / Artifacts
"artifacts"
{
"item" "item_helm_of_the_dominator"
"item" "item_mask_of_madness"
"item" "item_sange"
"item" "item_yasha"
"item" "item_maelstrom"
"item" "item_diffusal_blade"
"item" "item_desolator"
"item" "item_heavens_halberd"
"item" "item_sange_and_yasha"
"item" "item_mjollnir"
"item" "item_skadi"
"item" "item_satanic"
}
"sideshop1"
{
"item" "item_greater_clarity"
"item" "item_tango"
"item" "item_flask"
}
"sideshop2"
{
"item" "item_greater_clarity"
"item" "item_tango"
"item" "item_flask"
}
"secretshop"
{
"item" "item_orb_of_venom"
"item" "item_ring_of_health"
"item" "item_void_stone"
"item" "item_energy_booster"
"item" "item_vitality_booster"
"item" "item_point_booster"
"item" "item_hyperstone"
"item" "item_demon_edge"
"item" "item_mystic_staff"
"item" "item_reaver"
"item" "item_eagle"
"item" "item_relic"
}
}
You simply list the items you want in each category. Not complicated, huh?
Marking items as non-purchasable
Unfortunately, even if an item isn't featured in one of your shop, it might still be purchasable if the user searches for it in shop tab. Therefore, something has to be done to prevent this. This is done via the npc_abilities_override.txt file. Here is where it should be located:
where zergling_madness is the name of your addon. The next step is to list the items we want removed from our shop. In the following list, every item in the default game except blink dagger and item recipes (which are useless anyway) have been made impossible to purchase in the map:
Code:
// Dota Abilities Override File
"DOTAAbilities"
{
"Version" "1"
//Courier
"item_courier"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_flying_courier"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
//Items
"item_abyssal_blade"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_aegis"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ancient_janggo"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_arcane_boots"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_armlet"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_assault"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_band_of_elvenskin"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_basher"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_belt_of_strength"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_bfury"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_black_king_bar"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_blades_of_attack"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_blade_mail"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_blade_of_alacrity"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_blink"
{
"AbilityCooldown" "0"
"ItemPurchasable" "1"
"ItemDroppable" "0"
}
"item_bloodstone"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_boots"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_boots_of_elves"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_bottle"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_bracer"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_branches"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_broadsword"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_buckler"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_butterfly"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_chainmail"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_cheese"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_circlet"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_clarity"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_claymore"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_cloak"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dagon"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dagon_2"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dagon_3"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dagon_4"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dagon_5"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_demon_edge"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_desolator"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_diffusal_blade"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_diffusal_blade_2"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_dust"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_eagle"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_energy_booster"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ethereal_blade"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_cyclone"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_flask"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_flask2"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_force_staff"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_gauntlets"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_gem"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_gem_of_true_sight"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ghost"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ghost_scepter"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_gloves"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_gloves_of_haste"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_greater_clarity"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_greater_crit"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_hand_of_midas"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_headdress"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_heart"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_heavens_halberd"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_helm_of_iron_will"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_helm_of_the_dominator"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_hood_of_defiance"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_hyperstone"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_invis_sword"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_javelin"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_lesser_crit"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_lifesteal"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_maelstrom"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_magic_stick"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_magic_wand"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_manta"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mantle"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mask_of_madness"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_medallion_of_courage"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mekansm"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mithril_hammer"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mjollnir"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_monkey_king_bar"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_mystic_staff"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_necronomicon"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_necronomicon_2"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_necronomicon_3"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_null_talisman"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_oblivion_staff"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ogre_axe"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_orb_of_venom"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_orchid"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_pers"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_phase_boots"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_pipe"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_platemail"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_point_booster"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_poor_mans_shield"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_power_treads"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_quarterstaff"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_quelling_blade"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_radiance"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_rapier"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_reaver"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_refresher"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_relic"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ring_of_aquila"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ring_of_basilius"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ring_of_health"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ring_of_protection"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ring_of_regen"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_robe"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_rod_of_atos"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_salve"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_sange"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_sange_and_yasha"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_satanic"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_shadow_amulet"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_sheepstick"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_shivas_guard"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_skadi"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_slippers"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_slippers_of_halcyon"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_smoke_of_deceit"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_sobi_mask"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_soul_booster"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_soul_ring"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_sphere"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_staff_of_wizardry"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_stout_shield"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_talisman_of_evasion"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_tango"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_tango_single"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_tombstone"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_tpscroll"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_tranquil_boots"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_travel_boots"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ultimate_orb"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ultimate_scepter"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_urn_of_shadows"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_vanguard"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_veil_of_discord"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_vitality_booster"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_vladmir"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_void_stone"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ward_observer"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_ward_sentry"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_wraith_band"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
"item_yasha"
{
"ItemPurchasable" "0"
"ItemDroppable" "0"
}
}
Furthermore, they shouldn't even show up if the user searches for them in the shop tab.
Additional detail for secret shop items
Custom items intended to be sold from the secret shop need an additional setting. Under your custom item in npc_items_custom.txt, those 2 lines need to be added:
Code:
"ItemQuality" "secret_shop"
"SecretShop" "1"
Otherwise, the item will go directly into your stash on purchase.
Last edited: