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.