A Shop Like Thing: Difference between revisions

From The Battle for Wesnoth Wiki
Henkutsu (talk | contribs)
Changed structure of page. Added comments and updated code where I could. Added see also. Kept links but it should all make sense now.
Octalot (talk | contribs)
→A Shop Like Thing: Suggest using the Colosseum shop, remove placeholders that were never finished
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Please note that this code is a bit out of date. All references to "range" should be "melee" or "ranged" now instead of "short" and "long" (Have been fixed now). There may be other parts that are out of date, particularily in regards to adding specials. Check [[ReferenceWML]] on the tags just to check :) Happy coding.
{{WML Tags}}


== A Shop Like Thing ==
== A Shop Like Thing ==


Just paste this code into your scenario:
In this page you can see different techniques of creating a shop.
The code inside each [option] tag are different items, their attributes can easily be changed.
In the first section of code, it defines on what coordinates on the map are the shops located. it also shows which sides can use them. You can take out any item in [options] tags and this code still works., as long as you have the beginning and the end bits.


"side=1,2,3,4
== Example implementations ==
x=37,34,40,37
y=1,2,2,4"


[event]
There's a [https://r.wesnoth.org/t50024 discussion thread] that started in 2019 (Wesnoth 1.14).
name=moveto
first_time_only=no
[filter]
side=1,2,3,4
x=37,34,40,37
y=1,2,2,4
[/filter]
[store_gold]
side=$side_number
variable=gold
[/store_gold]
[message]
speaker=narrator
message=_ "What items would you like to purchase?"


=== Melee damage increase ===
=== The Colosseum add-on's shop ===
[option]
message=_ "Sharpen Melee Weapon g:140 dmg:2"
[command]
[if]
[variable]
name=gold
greater_than=140
[/variable]
[then]
[gold]
amount=-140
side=$side_number
[/gold]
[object]
[effect]
apply_to=attack
range=melee
increase_damage=2
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Ranged damage increase ===
The add-on [https://r.wesnoth.org/t27671 Colosseum] has a shop that's intended to be usable by other add-ons. Basic usage is given in the ''readme'' file in the add-on.
[option]
message=_ "Enchance Ranged Weapon g:150 dmg:2"
[command]
[if]
[variable]
name=gold
greater_than=150
[/variable]
[then]
[gold]
side=$side_number
amount=-150
[/gold]
[object]
[effect]
apply_to=attack
range=ranged
increase_damage=2
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Extra damage and magical enhancement ===
=== Simple ===
(May be partially out of date)
Use this macro to place a moveto event in your scenario that defines a magic-items shop. Argument is a [[StandardLocationFilter]].
[option]
message=_ "Crystal Orb g:150 dmg:+2 Magical"
[command]
[if]
[variable]
name=gold
greater_than=150
[/variable]
[then]
[gold]
amount=-150
side=$side_number
[/gold]
[object]
[effect]
apply_to=attack
special=magical
increase_damage=2
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Increase maximum HP ===
Used macros:
[option]
* VARIABLE_CONDITIONAL (from file [http://www.wesnoth.org/macro-reference.xhtml#file:utils.cfg utils.cfg])
message=_ "Toughness Increase Scroll g:250 hp:10"
* CLEAR_VARIABLE (from file [http://www.wesnoth.org/macro-reference.xhtml#file:utils.cfg utils.cfg])
[command]
* WEAPON_SPECIAL_MAGICAL (from file[http://www.wesnoth.org/macro-reference.xhtml#file:abilities.cfg abilities.cfg])
[if]
[variable]
name=gold
greater_than=250
[/variable]
[then]
[gold]
amount=-250
side=$side_number
[/gold]
[object]
[effect]
apply_to=hitpoints
increase_total=10
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Set Movement to 10 ===
#define CREATE_SIMPLE_SHOP FILTER
  [option]
    [event]
message=_ "Flying Boots g:400 m:to 10"
        name=moveto
  [command]
        first_time_only=no
  [if]
        [filter]
[variable]
            # this is not a macro. It is a argument token,
name=gold
            # which will be substituted with argument value
  greater_than=400
            {FILTER}
[/variable]
        [/filter]
[then]
        [store_gold]
[gold]
            side=$side_number
amount=-400
            variable=css_gold
side=$side_number
            # it is bad idea to use simple variable names like "gold" inside macro
[/gold]
            # because you can overwrite values of variables,
[object]  
            # which was defined outside of this macro and was supposed to be used for
[effect]  
            # anything else. To prevent any side effects, preceed macro-specific variables
apply_to=movement
            #  with abbreviation of macro name
set=10
        [/store_gold]
  [/effect]
        # this is easiest way to create menu in the game.
  [/object]
        # you just define each value and player sees them anytime he trigger this event
  [/then]
        [message]
  [/if]
            speaker=narrator
  [/command]
            message=_ "What items would you like to purchase?"
  [/option]
            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


=== Add Extra Movement ===
== Feature suggestions ==
[option]
message=_ "Boot Upgrade g:400 m:+1"
[command]
[if]
[variable]
name=gold
greater_than=400
[/variable]
[then]
[gold]
amount=-400
side=1
[/gold]
[object]
[effect]
apply_to=movement
increase=1
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Heal damage ===
=== Allow multiple choices in single dialog ===
(May be partially out of date)
[option]
message=_ "Healing Fountain g:All hp:+50"
[command]
[if]
[variable]
name=gold
greater_than=0
[/variable]
[then]
[gold]
amount=0
side=$side_number
[/gold]
[object]
[effect]
apply_to=hitpoints
increase=50
violate_max=1
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Extra Melee attack ===
Instead of exiting after the player buys one item, a better shop allows the player to buy more than one. This can be done with an infinite loop, which exits when the player chooses the "exit" option. For example, the Colosseum's implementation:
[option]
message=_ "Rage Stone g:300 atks:+1 Melee"
[command]
[if]
[variable]
name=gold
greater_than=300
[/variable]
[then]
[gold]
amount=-300
side=$side_number
[/gold]
[object]
[effect]
apply_to=attack
range=melee
increase_attacks=1
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Extra ranged attack ===
    [while]
[option]
        [variable]
message=_ "Sight Stone g:350 atks:+1 ranged"
            name=finished
[command]
            boolean_equals=no
[if]
        [/variable]
[variable]
        [do]
name=gold
            # ...
greater_than=350
                [option]
[/variable]
                    label= _ "Done"
[then]
                    [command]
[gold]
                        {VARIABLE finished yes}
amount=-350
                    [/command]
side=$side_number
                [/option]
[/gold]
            # ...
[object]
        [/do]
[effect]
    [/while]
apply_to=attack
range=ranged
increase_attacks=1
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Add a weapon ===
=== Optionally enter the shop ===
(May be partially out of date)
[option]
message=_ "Fire Scepter g:350 atks:8-1 ranged magical fire"
[command]
[if] 
[variable]
name=gold
greater_than=350
[/variable]
[then]
[gold]
amount=-350
side=$side_number
[/gold]
[object]
[effect]
apply_to=new_attack
name=Fire Scepter
type=fire
special=magical
range=ranged
damage=8
number=1
[/effect]
[/object]
[/then]
[/if]
[/command]
[/option]


=== Add a weapon ===
Instead of using ''moveto'' events, you can use [[InterfaceActionsWML#.5Bset_menu_item.5D|set_menu_item]] to allow the player to decide whether they want to enter the shop, by adding an "Enter Shop" option to the right-click menu.
(May be partially out of date)
[option]
message=_ "Ice Scepter g:350 atks:8-1 ranged magical Ice"
[command]
[if]
[variable]
name=gold
greater_than=350
[/variable]
[then]
[gold]
amount=-350
side=$side_number
[/gold]
[object]
[effect]
apply_to=new_attack
name=Ice Scepter
type=cold
special=magical
range=long
damage=8
  number=1
[/effect]
[/object]  [/then]
[/if] 
[/command]
[/option]
##########################closing tags
[/message]
[/event]


== See Also ==
== See Also ==

Latest revision as of 22:05, 30 June 2019

[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_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, core, credits_group, criteria;

D:

damage, damage_type, 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_ability, 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, fonts, for, foreach, found_item, 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_side, 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, map_data, 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, reset_fog, resistance (ability, unit), resistance_defaults, resolution, resource, return, role, rule;

S:

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, 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 (action, scenario), 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 techniques of creating a shop.

Example implementations

There's a discussion thread that started in 2019 (Wesnoth 1.14).

The Colosseum add-on's shop

The add-on Colosseum has a shop that's intended to be usable by other add-ons. Basic usage is given in the readme file in the add-on.

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

Feature suggestions

Allow multiple choices in single dialog

Instead of exiting after the player buys one item, a better shop allows the player to buy more than one. This can be done with an infinite loop, which exits when the player chooses the "exit" option. For example, the Colosseum's implementation:

   [while]
       [variable]
           name=finished
           boolean_equals=no
       [/variable]
       [do]
           # ...
               [option]
                   label= _ "Done"
                   [command]
                       {VARIABLE finished yes}
                   [/command]
               [/option]
           # ...
       [/do]
   [/while]

Optionally enter the shop

Instead of using moveto events, you can use set_menu_item to allow the player to decide whether they want to enter the shop, by adding an "Enter Shop" option to the right-click menu.

See Also

This page was last edited on 30 June 2019, at 22:05.
Cookies help us deliver our services. By using our services, you agree to our use of cookies.