Difference between revisions of "A Shop Like Thing"

From The Battle for Wesnoth Wiki
(Minor fixes.)
(I will update it later.)
Line 1: Line 1:
 +
{{WML Tags}}
 +
 
== A Shop Like Thing ==
 
== A Shop Like Thing ==
  
Call this macro to place a moveto event in your scenario that defines a magic-items shop. Argument is a standard location filter.  
+
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]].  
  
This code illustrates how to use the '''[command]''' and '''[option]''' tags.
+
Used macros:
 +
* VARIABLE_CONDITIONAL (from file [http://www.wesnoth.org/macro-reference.xhtml#file:utils.cfg utils.cfg])
 +
* CLEAR_VARAIBLE (from file [http://www.wesnoth.org/macro-reference.xhtml#file:utils.cfg utils.cfg])
 +
* WEAPON_SPECIAL_MAGICAL (from file[http://www.wesnoth.org/macro-reference.xhtml#file:abilities.cfg abilities.cfg])
  
  #define SHOP FILTER
+
  #define CREATE_SIMPLE_SHOP FILTER
 
     [event]
 
     [event]
 
         name=moveto
 
         name=moveto
 
         first_time_only=no
 
         first_time_only=no
 
         [filter]
 
         [filter]
 +
            # this is not a macro. It is a argument token,
 +
            # which will be substituted with argument value
 
             {FILTER}
 
             {FILTER}
 
         [/filter]
 
         [/filter]
 
         [store_gold]
 
         [store_gold]
 
             side=$side_number
 
             side=$side_number
             variable=gold
+
             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]
 
         [/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]
 
         [message]
 
             speaker=narrator
 
             speaker=narrator
Line 23: Line 40:
 
             [option]
 
             [option]
 
                 message=_ "140 GP: Sharpen Melee Weapon, damage:+2"
 
                 message=_ "140 GP: Sharpen Melee Weapon, damage:+2"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 140}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-140
                            name=gold
+
                        side=$side_number
                            greater_than=140
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-140
+
                            apply_to=attack
                                side=$side_number
+
                            # You need to specify filter for your effect
                            [/gold]
+
                            # but you should't use [filter] tags
                            [object]
+
                            # [filter]
                                [effect]
+
                            range=melee
                                    apply_to=attack
+
                            # [/filter]
                                    range=melee
+
                             increase_damage=2
                                    increase_damage=2
+
                         [/effect]
                                [/effect]
+
                     [/object]
                             [/object]
 
                         [/then]
 
                     [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 48: Line 65:
 
             [option]
 
             [option]
 
                 message=_ "150 GP: Enchance Ranged Weapon, damage +2"
 
                 message=_ "150 GP: Enchance Ranged Weapon, damage +2"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 150}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         side=$side_number
                            name=gold
+
                        amount=-150
                            greater_than=150
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                side=$side_number
+
                            apply_to=attack
                                amount=-150
+
                            # [filter]
                            [/gold]
+
                            range=ranged
                            [object]
+
                            # [/filter]
                                [effect]
+
                             increase_damage=2
                                    apply_to=attack
+
                         [/effect]
                                    range=ranged
+
                     [/object]
                                    increase_damage=2
 
                                [/effect]
 
                             [/object]
 
                         [/then]
 
                     [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 73: Line 88:
 
             [option]
 
             [option]
 
                 message=_ "150 GP: Crystal Orb, damage +2 on magical attack"
 
                 message=_ "150 GP: Crystal Orb, damage +2 on magical attack"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 150}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-150
                            name=gold
+
                        side=$side_number
                            greater_than=150
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-150
+
                            apply_to=attack
                                side=$side_number
+
                            # [filter]
                            [/gold]
+
                            special=chance_to_hit
                            [object]
+
                            # [/filter]
                                [effect]
+
                             increase_damage=2
                                    apply_to=attack
+
                         [/effect]
                                    special=magical
+
                     [/object]
                                    increase_damage=2
 
                                [/effect]
 
                             [/object]
 
                         [/then]
 
                     [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
 
   
 
   
 
             [option]
 
             [option]
                 message=_ "250 GP: Toughness Increase Scroll, HP+10"
+
                 message=_ "250 GP: Toughness Increase Scroll, Max HP+10"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 250}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-250
                            name=gold
+
                        side=$side_number
                            greater_than=250
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-250
+
                            apply_to=hitpoints
                                side=$side_number
+
                            increase_total=10
                            [/gold]
+
                        [/effect]
                            [object]
+
                    [/object]
                                [effect]
 
                                    apply_to=hitpoints
 
                                    increase_total=10
 
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 122: Line 131:
 
             [option]
 
             [option]
 
                 message=_ "400 GP: Seven-League Boots, gives MP of 10"
 
                 message=_ "400 GP: Seven-League Boots, gives MP of 10"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 400}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-400
                            name=gold
+
                        side=$side_number
                            greater_than=400
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-400
+
                            apply_to=movement
                                side=$side_number
+
                            set=10
                            [/gold]
+
                        [/effect]
                            [object]
+
                    [/object]
                                [effect]
 
                                    apply_to=movement
 
                                    set=10
 
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 146: Line 151:
 
             [option]
 
             [option]
 
                 message=_ "400 GP: Boot Upgrade, MP+1"
 
                 message=_ "400 GP: Boot Upgrade, MP+1"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 400}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-400
                            name=gold
+
                        side=1
                            greater_than=400
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-400
+
                            apply_to=movement
                                side=1
+
                            increase=1
                            [/gold]
+
                        [/effect]
                            [object]
+
                    [/object]
                                [effect]
 
                                    apply_to=movement
 
                                    increase=1
 
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 170: Line 171:
 
             [option]
 
             [option]
 
                 message=_ "All GP: Healing Fountain, HP:+50"
 
                 message=_ "All GP: Healing Fountain, HP:+50"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 0}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-$css_gold
                            name=gold
+
                        side=$side_number
                            greater_than=0
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=0
+
                            apply_to=hitpoints
                                side=$side_number
+
                            increase=50
                            [/gold]
+
                            violate_max=1
                            [object]
+
                        [/effect]
                                [effect]
+
                    [/object]
                                    apply_to=hitpoints
 
                                    increase=50
 
                                    violate_max=1
 
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 195: Line 192:
 
             [option]
 
             [option]
 
                 message=_ "300 GP: Rage Stone, add a melee swing"
 
                 message=_ "300 GP: Rage Stone, add a melee swing"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 300}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-300
                            name=gold
+
                        side=$side_number
                            greater_than=300
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-300
+
                            apply_to=attack
                                side=$side_number
+
                            # [filter]
                            [/gold]
+
                            range=melee
                            [object]
+
                            # [/filter]
                                [effect]
+
                             increase_attacks=1
                                    apply_to=attack
+
                         [/effect]
                                    range=melee
+
                     [/object]
                                    increase_attacks=1
 
                                [/effect]
 
                             [/object]
 
                         [/then]
 
                     [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 220: Line 215:
 
             [option]
 
             [option]
 
                 message=_ "350 GP: Sight Stone, add a ranged attack"
 
                 message=_ "350 GP: Sight Stone, add a ranged attack"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 350}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-350
                            name=gold
+
                        side=$side_number
                            greater_than=350
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-350
+
                            apply_to=attack
                                side=$side_number
+
                            # [filter]
                            [/gold]
+
                            range=ranged
                            [object]
+
                            # [/filter]
                                [effect]
+
                             increase_attacks=1
                                    apply_to=attack
+
                         [/effect]
                                    range=ranged
+
                     [/object]
                                    increase_attacks=1
 
                                [/effect]
 
                             [/object]
 
                         [/then]
 
                     [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 245: Line 238:
 
             [option]
 
             [option]
 
                 message=_ "350 GP: Fire Scepter, adds 8-1 ranged magical fire"
 
                 message=_ "350 GP: Fire Scepter, adds 8-1 ranged magical fire"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 350}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-350
                            name=gold
+
                        side=$side_number
                            greater_than=350
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-350
+
                            apply_to=new_attack
                                side=$side_number
+
                            name=Fire Scepter
                            [/gold]
+
                            type=fire
                            [object]
+
                            range=ranged
                                [effect]
+
                            [specials]
                                    apply_to=new_attack
+
                                {WEAPON_SPECIAL_MAGICAL}
                                    name=Fire Scepter
+
                            [/specials]
                                    type=fire
+
                            damage=8
                                    range=ranged
+
                            number=1
                                    special=magical
+
                        [/effect]
                                    damage=8
+
                    [/object]
                                    number=1
 
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
Line 274: Line 265:
 
             [option]
 
             [option]
 
                 message=_ "350GP: Ice Scepter, adds 8-1 ranged magical ice"
 
                 message=_ "350GP: Ice Scepter, adds 8-1 ranged magical ice"
 +
                [show_if]
 +
                    {VARIABLE_CONDITIONAL gold greater_than 350}
 +
                [/show_if]
 
                 [command]
 
                 [command]
                     [if]
+
                     [gold]
                        [variable]
+
                         amount=-350
                            name=gold
+
                        side=$side_number
                            greater_than=350
+
                    [/gold]
                        [/variable]
+
                    [object]
                         [then]
+
                        silent = yes
                            [gold]
+
                        [effect]
                                amount=-350
+
                            apply_to=new_attack
                                side=$side_number
+
                            name=Ice Scepter
                            [/gold]
+
                            type=cold
                            [object]
+
                            range=ranged
                                [effect]
+
                            [specials]
                                    apply_to=new_attack
+
                                {WEAPON_SPECIAL_MAGICAL}
                                    name=Ice Scepter
+
                            [/specials]
                                    type=cold
+
                            damage=8
                                    range=ranged
+
                            number=1
                                    damage=8
+
                        [/effect]
                                    number=1
+
                    [/object]
                                [/effect]
 
                            [/object]
 
                        [/then]
 
                    [/if]
 
 
                 [/command]
 
                 [/command]
 
             [/option]
 
             [/option]
 
         [/message]
 
         [/message]
 +
        {CLEAR_VARIABLE css_gold}
 
     [/event]
 
     [/event]
 
  #enddef
 
  #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.
  
 
== See Also ==
 
== See Also ==

Revision as of 18:52, 23 October 2014

[edit]WML Tags

A:

abilities, about, achievement, achievement_group, add_ai_behavior, advanced_preference, advancefrom, advancement, advances, affect_adjacent, ai, allied_with, allow_end_turn, allow_extra_recruit, allow_recruit, allow_undo, and, animate, animate_unit, animation, aspect, attack (replay, weapon), attack_anim, attacks (special, stats), avoid;

B:

base_unit, background_layer, berserk, binary_path, break, brush;

C:

campaign, cancel_action, candidate_action, capture_village, case, chance_to_hit, change_theme, chat, checkbox, choice, choose, clear_global_variable, clear_menu_item, clear_variable, color_adjust, color_palette, color_range, command (action, replay), continue, credits_group, criteria;

D:

damage, death, deaths, default, defend, defends, defense, delay, deprecated_message, destination, difficulty, disable, disallow_end_turn, disallow_extra_recruit, disallow_recruit, do, do_command, drains, draw_weapon_anim;

E:

editor_group, editor_music, editor_times, effect, else (action, animation), elseif, endlevel, end_turn (action, replay), enemy_of, engine, entry (credits, options), era, event, experimental_filter_ability, experimental_filter_ability_active, experimental_filter_specials, extra_anim;

F:

facet, facing, fake_unit, false, feedback, female, filter (concept, event), filter_adjacent, filter_adjacent_location, filter_attack, filter_attacker, filter_base_value, filter_condition, filter_defender, filter_enemy, filter_location, filter_opponent, filter_own, filter_owner, filter_radius, filter_recall, filter_second, filter_second_attack, filter_self, filter_side, filter_student, filter_vision, filter_weapon, filter_wml, find_path, fire_event, firststrike, floating_text, found_item, for, foreach, frame;

G:

game_config, get_global_variable, goal, gold, gold_carryover;

H:

harm_unit, has_ally, has_attack, has_unit, has_achievement, have_location, have_unit, heal_on_hit, heal_unit, healed_anim, healing_anim, heals, hide_help, hide_unit, hides;

I:

idle_anim, if (action, animation, intro), illuminates, image (intro, terrain), init_side, insert_tag, inspect, item, item_group;

J:

jamming_costs, join;

K:

kill, killed;

L:

label, language, leader, leader_goal, leadership, leading_anim, levelin_anim, levelout_anim, lift_fog, limit, literal, load_resource, locale, lock_view, lua;

M:

male, menu_item, message, micro_ai, missile_frame, modification, modifications, modify_ai, modify_side, modify_turns, modify_unit, modify_unit_type, move, move_unit, move_unit_fake, move_units_fake, movement_anim, movement costs, movetype, multiplayer, multiplayer_side, music;

N:

not, note;

O:

object, objective, objectives, on_undo, open_help, option, options, or;

P:

part, petrifies, petrify, place_shroud, plague, poison, post_movement_anim, pre_movement_anim, primary_attack, primary_unit, print, progress_achievement, put_to_recall_list;

R:

race, random_placement, recall (action, replay), recalls, recruit, recruit_anim, recruiting_anim, recruits, redraw, regenerate, remove_event, remove_item, remove_object, remove_shroud, remove_sound_source, remove_time_area, remove_trait, remove_unit_overlay, repeat, replace_map, replace_schedule, replay, replay_start, reset_fog, resistance (ability, unit), resistance_defaults, resolution, resource, return, role, rule;

S:

save, scenario, screen_fade, scroll, scroll_to, scroll_to_unit, secondary_attack, secondary_unit, section, select_unit, sequence, set_achievement, set_extra_recruit, set_global_variable, set_menu_item, set_recruit, set_specials, set_variable, set_variables, sheath_weapon_anim, show_if (message, objective, set_menu_item), show_objectives, side, skirmisher, slider, slow, snapshot, sound, sound_source, source (replay, teleport), special_note, specials, split, stage, standing_anim, statistics, status, store_gold, store_items, store_locations, store_map_dimensions, store_reachable_locations, store_relative_direction, store_side, store_starting_location, store_time_of_day, store_turns, store_unit, store_unit_defense, store_unit_defense_on, store_unit_type, store_unit_type_ids, store_villages, story, swarm, sub_achievement, switch, sync_variable;

T:

target, team, teleport (ability, action), teleport_anim, terrain, terrain_defaults, terrain_graphics, terrain_mask, terrain_type, test, test_condition, test_do_attack_by_id, text_input, textdomain, theme, then, tile, time, time_area, topic, toplevel, trait, transform_unit, traveler, true, tunnel;

U:

unhide_unit, unit, unit_overlay, unit_type, unit_worth, units, unlock_view, unpetrify, unstore_unit, unsynced;

V:

value, variable, variables, variant, variation, victory_anim, village, vision_costs, volume;

W:

while, wml_message, wml_schema;

Z:

zoom;

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:

#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.

See Also