A Shop Like Thing
Contents
A Shop Like Thing
In this page you can see different tecniques of creating a shop.
Simple
Use this macro to place a moveto event in your scenario that defines a magic-items shop. Argument is a StandardLocationFilter.
Used macros:
- VARIABLE_CONDITIONAL (from file utils.cfg)
- CLEAR_VARAIBLE (from file utils.cfg)
- WEAPON_SPECIAL_MAGICAL (from fileabilities.cfg)
#define CREATE_SIMPLE_SHOP FILTER [event] name=moveto first_time_only=no [filter] # this is not a macro. It is a argument token, # which will be substituted with argument value {FILTER} [/filter] [store_gold] side=$side_number variable=css_gold # it is bad idea to use simple variable names like "gold" inside macro # because you can overwrite values of variables, # which was defined outside of this macro and was supposed to be used for # anything else. To prevent any side effects, preceed macro-specific variables # with abbreviation of macro name [/store_gold] # this is easiest way to create menu in the game. # you just define each value and player sees them anytime he trigger this event [message] speaker=narrator message=_ "What items would you like to purchase?" image=wesnoth-icon.png [option] message=_ "140 GP: Sharpen Melee Weapon, damage:+2" [show_if] {VARIABLE_CONDITIONAL gold greater_than 140} [/show_if] [command] [gold] amount=-140 side=$side_number [/gold] [object] silent = yes [effect] apply_to=attack # You need to specify filter for your effect # but you should't use [filter] tags # [filter] range=melee # [/filter] increase_damage=2 [/effect] [/object] [/command] [/option] [option] message=_ "150 GP: Enchance Ranged Weapon, damage +2" [show_if] {VARIABLE_CONDITIONAL gold greater_than 150} [/show_if] [command] [gold] side=$side_number amount=-150 [/gold] [object] silent = yes [effect] apply_to=attack # [filter] range=ranged # [/filter] increase_damage=2 [/effect] [/object] [/command] [/option] [option] message=_ "150 GP: Crystal Orb, damage +2 on magical attack" [show_if] {VARIABLE_CONDITIONAL gold greater_than 150} [/show_if] [command] [gold] amount=-150 side=$side_number [/gold] [object] silent = yes [effect] apply_to=attack # [filter] special=chance_to_hit # [/filter] increase_damage=2 [/effect] [/object] [/command] [/option] [option] message=_ "250 GP: Toughness Increase Scroll, Max HP+10" [show_if] {VARIABLE_CONDITIONAL gold greater_than 250} [/show_if] [command] [gold] amount=-250 side=$side_number [/gold] [object] silent = yes [effect] apply_to=hitpoints increase_total=10 [/effect] [/object] [/command] [/option] [option] message=_ "400 GP: Seven-League Boots, gives MP of 10" [show_if] {VARIABLE_CONDITIONAL gold greater_than 400} [/show_if] [command] [gold] amount=-400 side=$side_number [/gold] [object] silent = yes [effect] apply_to=movement set=10 [/effect] [/object] [/command] [/option] [option] message=_ "400 GP: Boot Upgrade, MP+1" [show_if] {VARIABLE_CONDITIONAL gold greater_than 400} [/show_if] [command] [gold] amount=-400 side=1 [/gold] [object] silent = yes [effect] apply_to=movement increase=1 [/effect] [/object] [/command] [/option] [option] message=_ "All GP: Healing Fountain, HP:+50" [show_if] {VARIABLE_CONDITIONAL gold greater_than 0} [/show_if] [command] [gold] amount=-$css_gold side=$side_number [/gold] [object] silent = yes [effect] apply_to=hitpoints increase=50 violate_max=1 [/effect] [/object] [/command] [/option] [option] message=_ "300 GP: Rage Stone, add a melee swing" [show_if] {VARIABLE_CONDITIONAL gold greater_than 300} [/show_if] [command] [gold] amount=-300 side=$side_number [/gold] [object] silent = yes [effect] apply_to=attack # [filter] range=melee # [/filter] increase_attacks=1 [/effect] [/object] [/command] [/option] [option] message=_ "350 GP: Sight Stone, add a ranged attack" [show_if] {VARIABLE_CONDITIONAL gold greater_than 350} [/show_if] [command] [gold] amount=-350 side=$side_number [/gold] [object] silent = yes [effect] apply_to=attack # [filter] range=ranged # [/filter] increase_attacks=1 [/effect] [/object] [/command] [/option] [option] message=_ "350 GP: Fire Scepter, adds 8-1 ranged magical fire" [show_if] {VARIABLE_CONDITIONAL gold greater_than 350} [/show_if] [command] [gold] amount=-350 side=$side_number [/gold] [object] silent = yes [effect] apply_to=new_attack name=Fire Scepter type=fire range=ranged [specials] {WEAPON_SPECIAL_MAGICAL} [/specials] damage=8 number=1 [/effect] [/object] [/command] [/option] [option] message=_ "350GP: Ice Scepter, adds 8-1 ranged magical ice" [show_if] {VARIABLE_CONDITIONAL gold greater_than 350} [/show_if] [command] [gold] amount=-350 side=$side_number [/gold] [object] silent = yes [effect] apply_to=new_attack name=Ice Scepter type=cold range=ranged [specials] {WEAPON_SPECIAL_MAGICAL} [/specials] damage=8 number=1 [/effect] [/object] [/command] [/option] [/message] {CLEAR_VARIABLE css_gold} [/event] #enddef
Allow multiple choices in single dialog
In this example I show how to use infinite loop, which breaks when player chooses "exit" option.
Optionally enter the shop
In this example I show how to use [set_menu_item] to allow player to decide: whether he want to enter the shop or not.
Limit quantity of items
In this example I modify previous show with variables, indicating quantity of items in shop. Trivial options like "sharpen weapon" will be infinite.
Limit number of uses per each unit
In this example I show how to limit infinite options for every unit entering the shop.
Create random options
In this example I show how to use [insert_tag] to show options, created at runtime. The random option will be "Healing" with variable price and value.
Allow user to track bought items
In this example I show how to create additional menu, which allow user to see: which items was bought for this unit.
Allow to sell bought items
In this example I show how to sell items to the shop.