Difference between revisions of "A Shop Like Thing"

From The Battle for Wesnoth Wiki
(Changed structure of page. Added comments and updated code where I could. Added see also. Kept links but it should all make sense now.)
(Cleaned up the shop code and wrapped it as a macro definition.)
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.
 
 
 
== A Shop Like Thing ==
 
== A Shop Like Thing ==
  
Just paste this code into your scenario:
+
Call this macro to place a moveto event in your scenario that defines a magic-items shop. Argument is a standard location filter.  
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
 
x=37,34,40,37
 
y=1,2,2,4"
 
  
  [event]
+
  #define SHOP FILTER
name=moveto  
+
    [event]
first_time_only=no
+
        name=moveto
[filter]
+
        first_time_only=no
side=1,2,3,4
+
        [filter]
x=37,34,40,37
+
            {FILTER}
y=1,2,2,4
+
        [/filter]
[/filter]
+
        [store_gold]
[store_gold]
+
            side=$side_number
side=$side_number
+
            variable=gold
variable=gold
+
        [/store_gold]
[/store_gold]
+
        [message]
[message]
+
            speaker=narrator
speaker=narrator
+
            message=_ "What items would you like to purchase?"
message=_ "What items would you like to purchase?"
+
            image=wesnoth-icon.png
  
=== Melee damage increase ===
+
            [option]
[option]
+
                message=_ "140 GP: Sharpen Melee Weapon, damage:+2"
message=_ "Sharpen Melee Weapon g:140 dmg:2"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=140
greater_than=140
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-140
amount=-140
+
                                side=$side_number
side=$side_number
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=attack
apply_to=attack
+
                                    range=melee
range=melee
+
                                    increase_damage=2
increase_damage=2
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Ranged damage increase ===
+
            [option]
[option]
+
                message=_ "150 GP: Enchance Ranged Weapon, damage +2"
message=_ "Enchance Ranged Weapon g:150 dmg:2"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=150
greater_than=150
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                side=$side_number
side=$side_number
+
                                amount=-150
amount=-150
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=attack
apply_to=attack
+
                                    range=ranged
range=ranged
+
                                    increase_damage=2
increase_damage=2
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Extra damage and magical enhancement ===
+
            [option]
(May be partially out of date)
+
                message=_ "150 GP: Crystal Orb, damage +2 on magical attack"
[option]
+
                [command]
message=_ "Crystal Orb g:150 dmg:+2 Magical"
+
                    [if]
[command]
+
                        [variable]
[if]
+
                            name=gold
[variable]
+
                            greater_than=150
name=gold
+
                        [/variable]
greater_than=150
+
                        [then]
[/variable]
+
                            [gold]
[then]
+
                                amount=-150
[gold]
+
                                side=$side_number
amount=-150
+
                            [/gold]
side=$side_number
+
                            [object]
[/gold]
+
                                [effect]
[object]
+
                                    apply_to=attack
[effect]
+
                                    increase_damage=2
apply_to=attack
+
                                [/effect]
special=magical
+
                            [/object]
increase_damage=2
+
                        [/then]
[/effect]
+
                    [/if]
[/object]
+
                [/command]
[/then]
+
            [/option]
[/if]
 
[/command]
 
[/option]
 
  
=== Increase maximum HP ===
+
            [option]
[option]
+
                message=_ "250 GP: Toughness Increase Scroll, HP+10"
message=_ "Toughness Increase Scroll g:250 hp:10"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=250
greater_than=250
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-250
amount=-250
+
                                side=$side_number
side=$side_number
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=hitpoints
apply_to=hitpoints
+
                                    increase_total=10
increase_total=10
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Set Movement to 10 ===
+
            [option]
[option]
+
                message=_ "400 GP: Seven-League Boots, gives MP of 10"
message=_ "Flying Boots g:400 m:to 10"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=400
greater_than=400
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-400
amount=-400
+
                                side=$side_number
side=$side_number
+
                            [/gold]
[/gold]
+
                            [object]
[object]  
+
                                [effect]
[effect]  
+
                                    apply_to=movement
apply_to=movement
+
                                    set=10
set=10
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Add Extra Movement ===
+
            [option]
[option]  
+
                message=_ "400 GP: Boot Upgrade, MP+1"
message=_ "Boot Upgrade g:400 m:+1"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=400
greater_than=400
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-400
amount=-400
+
                                side=1
side=1
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=movement
apply_to=movement
+
                                    increase=1
increase=1
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]  
 
  
=== Heal damage ===
+
            [option]
(May be partially out of date)
+
                message=_ "All GP: Healing Fountain, HP:+50"
[option]
+
                [command]
message=_ "Healing Fountain g:All hp:+50"
+
                    [if]
[command]
+
                        [variable]
[if]
+
                            name=gold
[variable]
+
                            greater_than=0
name=gold
+
                        [/variable]
greater_than=0
+
                        [then]
[/variable]
+
                            [gold]
[then]
+
                                amount=0
[gold]
+
                                side=$side_number
amount=0
+
                            [/gold]
side=$side_number
+
                            [object]
[/gold]
+
                                [effect]
[object]
+
                                    apply_to=hitpoints
[effect]
+
                                    increase=50
apply_to=hitpoints
+
                                    violate_max=1
increase=50
+
                                [/effect]
violate_max=1
+
                            [/object]
[/effect]
+
                        [/then]
[/object]
+
                    [/if]
[/then]
+
                [/command]
[/if]
+
            [/option]
[/command]
 
[/option]
 
  
=== Extra Melee attack ===
+
            [option]
[option]
+
                message=_ "300 GP: Rage Stone, add a melee swing"
message=_ "Rage Stone g:300 atks:+1 Melee"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=300
greater_than=300
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-300
amount=-300
+
                                side=$side_number
side=$side_number
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=attack
apply_to=attack
+
                                    range=melee
range=melee
+
                                    increase_attacks=1
increase_attacks=1
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Extra ranged attack ===
+
            [option]
[option]  
+
                message=_ "350 GP: Sight Stone, add a ranged attack"
message=_ "Sight Stone g:350 atks:+1 ranged"
+
                [command]
[command]
+
                    [if]
[if]
+
                        [variable]
[variable]
+
                            name=gold
name=gold
+
                            greater_than=350
greater_than=350
+
                        [/variable]
[/variable]
+
                        [then]
[then]
+
                            [gold]
[gold]
+
                                amount=-350
amount=-350
+
                                side=$side_number
side=$side_number
+
                            [/gold]
[/gold]
+
                            [object]
[object]
+
                                [effect]
[effect]
+
                                    apply_to=attack
apply_to=attack
+
                                    range=ranged
range=ranged
+
                                    increase_attacks=1
increase_attacks=1
+
                                [/effect]
[/effect]
+
                            [/object]
[/object]
+
                        [/then]
[/then]
+
                    [/if]
[/if]
+
                [/command]
[/command]
+
            [/option]
[/option]
 
  
=== Add a weapon ===
+
            [option]
(May be partially out of date)
+
                message=_ "350 GP: Fire Scepter, adds 8-1 ranged magical fire"
[option]
+
                [command]
message=_ "Fire Scepter g:350 atks:8-1 ranged magical fire"
+
                    [if]
[command]  
+
                        [variable]
[if]
+
                            name=gold
[variable]
+
                            greater_than=350
name=gold
+
                        [/variable]
greater_than=350
+
                        [then]
[/variable]
+
                            [gold]
[then]
+
                                amount=-350
[gold]
+
                                side=$side_number
amount=-350
+
                            [/gold]
side=$side_number
+
                            [object]
[/gold]
+
                                [effect]
[object]
+
                                    apply_to=new_attack
[effect]
+
                                    name=Fire Scepter
apply_to=new_attack
+
                                    type=fire
name=Fire Scepter
+
                                    range=ranged
type=fire
+
                                    damage=8
special=magical
+
                                    number=1
range=ranged
+
                                [/effect]
damage=8
+
                            [/object]
number=1
+
                        [/then]
[/effect]
+
                    [/if]
[/object]
+
                [/command]
[/then]
+
            [/option]
[/if]
 
[/command]
 
[/option]
 
  
=== Add a weapon ===
+
            [option]
(May be partially out of date)
+
                message=_ "350GP: Ice Scepter, adds 8-1 ranged magical ice"
[option]
+
                [command]
message=_ "Ice Scepter g:350 atks:8-1 ranged magical Ice"
+
                    [if]
[command]
+
                        [variable]
[if]
+
                            name=gold
[variable]
+
                            greater_than=350
name=gold
+
                        [/variable]
greater_than=350
+
                        [then]
[/variable]
+
                            [gold]
[then]  
+
                                amount=-350
[gold]
+
                                side=$side_number
amount=-350
+
                            [/gold]
side=$side_number
+
                            [object]
[/gold]
+
                                [effect]
[object]
+
                                    apply_to=new_attack
[effect]
+
                                    name=Ice Scepter
apply_to=new_attack
+
                                    type=cold
name=Ice Scepter
+
                                    range=long
type=cold
+
                                    damage=8
special=magical
+
                                    number=1
range=long
+
                                [/effect]
damage=8
+
                            [/object]
  number=1
+
                        [/then]
[/effect]  
+
                    [/if]
[/object] [/then]
+
                [/command]
[/if]
+
            [/option]
[/command]
+
        [/message]
[/option]
+
    [/event]
##########################closing tags
+
#enddef
[/message]
 
[/event]
 
  
 
== See Also ==
 
== See Also ==

Revision as of 00:59, 27 February 2008

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.

#define SHOP FILTER
   [event]
       name=moveto
       first_time_only=no
       [filter]
           {FILTER}
       [/filter]
       [store_gold]
           side=$side_number
           variable=gold
       [/store_gold]
       [message]
           speaker=narrator
           message=_ "What items would you like to purchase?"
           image=wesnoth-icon.png
           [option]
               message=_ "140 GP: Sharpen Melee Weapon, damage:+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]
           [option]
               message=_ "150 GP: Enchance Ranged Weapon, damage +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]
           [option]
               message=_ "150 GP: Crystal Orb, damage +2 on magical attack"
               [command]
                   [if]
                       [variable]
                           name=gold
                           greater_than=150
                       [/variable]
                       [then]
                           [gold]
                               amount=-150
                               side=$side_number
                           [/gold]
                           [object]
                               [effect]
                                   apply_to=attack
                                   increase_damage=2
                               [/effect]
                           [/object]
                       [/then]
                   [/if]
               [/command]
           [/option]
           [option]
               message=_ "250 GP: Toughness Increase Scroll, HP+10"
               [command]
                   [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]
           [option]
               message=_ "400 GP: Seven-League Boots, gives MP of 10"
               [command]
                   [if]
                       [variable]
                           name=gold
                           greater_than=400
                       [/variable]
                       [then]
                           [gold]
                               amount=-400
                               side=$side_number
                           [/gold]
                           [object]
                               [effect]
                                   apply_to=movement
                                   set=10
                               [/effect]
                           [/object]
                       [/then]
                   [/if]
               [/command]
           [/option]
           [option]
               message=_ "400 GP: Boot Upgrade, MP+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]
           [option]
               message=_ "All GP: Healing Fountain, 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]
           [option]
               message=_ "300 GP: Rage Stone, add a melee swing"
               [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]
           [option]
               message=_ "350 GP: Sight Stone, add a ranged attack"
               [command]
                   [if]
                       [variable]
                           name=gold
                           greater_than=350
                       [/variable]
                       [then]
                           [gold]
                               amount=-350
                               side=$side_number
                           [/gold]
                           [object]
                               [effect]
                                   apply_to=attack
                                   range=ranged
                                   increase_attacks=1
                               [/effect]
                           [/object]
                       [/then]
                   [/if]
               [/command]
           [/option]
           [option]
               message=_ "350 GP: Fire Scepter, adds 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
                                   range=ranged
                                   damage=8
                                   number=1
                               [/effect]
                           [/object]
                       [/then]
                   [/if]
               [/command]
           [/option]
           [option]
               message=_ "350GP: Ice Scepter, adds 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
                                   range=long
                                   damage=8
                                   number=1
                               [/effect]
                           [/object]
                       [/then]
                   [/if]
               [/command]
           [/option]
       [/message]
   [/event]
#enddef

See Also