What the.. - another WML problem.

The place to post your WML questions and answers.

Moderator: Forum Moderators

Forum rules
  • Please use [code] BBCode tags in your posts for embedding WML snippets.
  • To keep your code readable so that others can easily help you, make sure to indent it following our conventions.
Post Reply
User avatar
Tomsik
Posts: 1401
Joined: February 7th, 2005, 7:04 am
Location: Poland

What the.. - another WML problem.

Post by Tomsik »

I was a little too bored and started to make new MP scenario.(not sure that will be good, but it's always good way to waste some time :wink: )
Obviously scenario doesn't want to work, when somebody move it creates goblin for 1st side, i think it's something with BUY_LADDER macro, but i don't see where is problem, help me!

P.S.: It's not finished yet.

EDIT: Also when you move ladder near wall (LADDER_PLACE macro) it changes wrong hex.

Code: Select all

[multiplayer] 
   id=Sige
   name= _ "Sige" 
   map_data="gggggggggggWWWgggggg
gggggggggoWgggWogggg
gggggggWWgggCgggWWgt
gggggggWgCgggggCgWgg
gtggtggWgggCgCgggWgg
gggggggWgggg1ggggWgc
gggggggWgCggCggCgWct
WWtggCCWgggggggggWcC
ggWWCgggWWogCgoWWgcC
ggggWWggggWWgWWgggcW
gggggnouggggWggggWWg
ggggggnguogggggWWgcg
gIggggggnnWWtWWgggcg
IIIIggggggggWIIgggcg
IIPIggIIggggIPIggccg
ggIIIIIPIgggIIIgcggg
ggggggIIIgggggggcggg
vggggXXgXXggggggcggg
gggggXgggXvgggggcggg
gggggXgggXgXXgXXccgg
ggggggXXXggXgggXggcg
gggnnngggggXgggXvgcg
gggg2gggggggXXXggccg
gggggggggggnggggcggg
ggggoggvggn3ngggcggg
gvggggggggggggggcggg
gggggggggggoggggcggg
gggggggggggggvggccgg
gggggggggggggggggcgg
gggggggggggggggggcgg"
 
   description= _ "Sige"
   turns=90 

   {DAWN} 
   {MORNING} 
   {AFTERNOON} 
   {DUSK} 
   {FIRST_WATCH} 
   {SECOND_WATCH} 

################# macro define part ############## 

#define UNIT_SET TYPE SIDE X Y
   [unit]
   side={SIDE}
   x={X}
   y={Y}
   type={TYPE}
   [/unit]
#enddef

#define START_OFFENSIVE_UNITS X Y SIDE

	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Warrior
	description=Squad Leader
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Ancient Wose
	description=Battering Ram
	[modifications]
	[trait]
	[effect]
	apply_to=attack
	increase_damage=-24
	[/effect]
	[/trait]
	[/modifications]
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Archer
	description=Soldier
	[/unit]

	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Archer
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
#enddef
	
	
#define SIDE_SET SIDE
   [side] 
   side={SIDE} 
   team_name={SIDE} 
   canrecruit=1 
   controller=human 
   [/side] 
#enddef

#define VARIABLE_INIT NAME VALUE
[set_variable] 
   name={NAME} 
   value={VALUE}
[/set_variable] 
#enddef

#define LABEL X Y TEXT
[label]
x,y={X},{Y}
text={TEXT}
[/label]
#enddef

#define LADER_PLACE X Y
[event]
name=moveto
first_time_only=no
[filter]
type=Goblin Spearman
description=ladder
[/filter]
[if]
[have_unit]
x={X}
y={Y}
type=Goblin Spearman
description=ladder
[/have_unit]
[then]
[terrain]
x={X}
y={Y}-1
letter=u
[/terrain]
[kill]
x={X}
y={Y}
[/kill]
[/then]
[/if]
[/event]
#enddef

#define BUY_LADDER X Y XX YY
[event]
name=moveto
first_time_only=no
x={X}
y={Y}
[store_unit]
[filter]
x={X}
y={Y}
[/filter]
variable=ladder_trigger_unit
[/store_unit]
[store_gold]
side=$ladder_trigger_unit.side
variable=gold
[/store_gold]
[if]
[variable]
name=gold
greater_than_equal_to=10
[/variable]
[then]
[unit]
x={XX}
y={YY}
type=Goblin Spearman
description=ladder
side=$ladder_trigger_unit.side
[/unit]
[gold]
side=$ladder_trigger_unit.side
amount=-10
[/gold]
[/then]
[/if]
[/event]
#enddef

#################################################

{SIDE_SET 1}
{SIDE_SET 2}
{SIDE_SET 3}

[event] 
name=prestart

{VARIABLE_INIT GATES 1}
{START_OFFENSIVE_UNITS 8 19 2}
{START_OFFENSIVE_UNITS 14 21 3}

[/event]

{LABEL 11 9 ("Open gate")}
{LABEL 5 25 ("Buy ladder")}
{LABEL 12 27 ("Buy ladder")}

{BUY_LADDER 5 25 8 19}
{BUY_LADDER 12 27 14 21}

{LADER_PLACE 1 9}
{LADER_PLACE 2 9}
{LADER_PLACE 3 10}
{LADER_PLACE 4 10}
{LADER_PLACE 5 11}
{LADER_PLACE 11 14}
{LADER_PLACE 12 14}
{LADER_PLACE 13 15}
{LADER_PLACE 14 14}
{LADER_PLACE 15 14}
{LADER_PLACE 16 15}
{LADER_PLACE 17 15}
{LADER_PLACE 18 16}
{LADER_PLACE 19 16}
{LADER_PLACE 20 17}

[/multiplayer]
User avatar
zookeeper
WML Wizard
Posts: 9742
Joined: September 11th, 2004, 10:40 pm
Location: Finland

Post by zookeeper »

That's a bit long to carefully check everything, but here's one:

Code: Select all

#define BUY_LADDER X Y XX YY
[event]
name=moveto
first_time_only=no
x={X}
y={Y}
... 
You'll probably want the x and y to be inside a [filter]?

Also, it's a bit difficult to find bugs, because I really don't have an idea of how the scenario and the events are supposed to work. But still, this one looks suspicious as well:

Code: Select all

#define LADER_PLACE X Y
[event]
name=moveto
first_time_only=no
[filter]
type=Goblin Spearman
description=ladder
[/filter]
[if]
[have_unit]
x={X}
y={Y}
type=Goblin Spearman
description=ladder
[/have_unit]
[then]
... 
Are you sure that whenever you use this macro, you want to create a new event that triggers every time any Goblin Spearman with the description "ladder" moves (I suppose there will be quite a few of them)? The event filter doesn't filter for any location now, should it have x,y={X},{Y}? Then it would trigger only when a Goblin Spearman with the description "ladder" moves onto the hex that is given in the macro's attributes.
User avatar
Tomsik
Posts: 1401
Joined: February 7th, 2005, 7:04 am
Location: Poland

Post by Tomsik »

I changed both macros, they work good now... so stiupid mistakes...

Thanks zookeeper! :)
User avatar
Tomsik
Posts: 1401
Joined: February 7th, 2005, 7:04 am
Location: Poland

Post by Tomsik »

Nearly everything is working now, but i still have problem, gate closes, but doesn't want to open!

Code: Select all

[multiplayer] 
   id=Sige
   name= _ "Sige" 
   map_data="gggggggggggWWWgggggg
gggggggggoWgggWogggg
gggggggWWgggCgggWWgt
gggggggWgCgggggCgWgg
gtggtggWgggCgCgggWgg
gggggggWgggg1ggggWgc
gggggggWgCggCggCgWct
WWtggCCWgggggggggWcC
ggWWCgggWWogCgoWWgcC
ggggWWggggWWgWWgggcW
gggggnWuggggWggggWWg
ggggggnguWgggggWWgcg
gIggggggnnWWtWWgggcg
IIIIggggggggWIIgggcg
IIPIggIIggggIPIggccg
ggIIIIIPIgggIIIgcggg
ggggggIIIgggggggcggg
vggggXXgXXggggggcggg
gggggXgggXvgggggcggg
gggggXgggXgXXgXXccgg
ggggggXXXggXgggXggcg
gggnnngggggXgggXvgcg
gggg2gggggggXXXggccg
gggggggggggnggggcggg
ggggoggvggn3ngggcggg
gvggggggggggggggcggg
gggggggggggoggggcggg
gggggggggggggvggccgg
gggggggggggggggggcgg
gggggggggggggggggcgg"
 
   description= _ "Sige"
   turns=90 

   {DAWN} 
   {MORNING} 
   {AFTERNOON} 
   {DUSK} 
   {FIRST_WATCH} 
   {SECOND_WATCH} 

################# macro define part ############## 

#define UNIT_SET TYPE SIDE X Y
   [unit]
   side={SIDE}
   x={X}
   y={Y}
   type={TYPE}
   [/unit]
#enddef

#define WALL_GUARD X Y
{UNIT_SET (Wall Guard) 1 {X} {Y}}
#enddef

#define START_OFFENSIVE_UNITS X Y SIDE

	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Warrior
	description=Squad Leader
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Ancient Wose
	description=Battering Ram
	[modifications]
	[trait]
	[effect]
	apply_to=attack
	increase_damage=-24
	[/effect]
	[/trait]
	[/modifications]
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Archer
	description=Soldier
	[/unit]

	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Archer
	description=Soldier
	[/unit]
	
	[unit]
	side={SIDE}
	x={X}
	y={Y}
	type=Orcish Grunt
	description=Soldier
	[/unit]
#enddef
	
	
#define SIDE_SET SIDE
   [side] 
   side={SIDE} 
   team_name={SIDE} 
   canrecruit=1 
   controller=human 
   [/side] 
#enddef

#define VARIABLE_SET NAME VALUE
[set_variable] 
   name={NAME} 
   value={VALUE}
[/set_variable] 
#enddef

#define LABEL X Y TEXT
[label]
x,y={X},{Y}
text={TEXT}
[/label]
#enddef

#define LADDER_PLACE X Y
[event]
name=moveto
first_time_only=no
[filter]
x={X}
y={Y}
type=Goblin Spearman
description=ladder
[/filter]

[if] 
[variable]
name=nowall{X}{Y}
not_equals=131341526
[/variable]
[then]
{VARIABLE_SET y {Y}}

[set_variable] 
   name=y 
   add=-1
[/set_variable] 

[terrain]
x={X}
y=$y
letter=C
[/terrain]
[kill]
x={X}
y={Y}
[/kill]
{VARIABLE_SET (nowall{X}{Y}) 131341526}
[/then]
[/if]
[/event]
#enddef

#define BUY_LADDER X Y XX YY
[event]
name=moveto
first_time_only=no
[filter]
x={X}
y={Y}
[/filter]
[store_unit]
[filter]
x={X}
y={Y}
[/filter]
variable=ladder_trigger_unit
[/store_unit]
[store_gold]
side=$ladder_trigger_unit.side
variable=gold
[/store_gold]
[if]
[variable]
name=gold
greater_than_equal_to=10
[/variable]
[then]
[unit]
x={XX}
y={YY}
type=Goblin Spearman
description=ladder
side=$ladder_trigger_unit.side
[/unit]
[gold]
side=$ladder_trigger_unit.side
amount=-10
[/gold]
[/then]
[/if]
[/event]
#enddef

#define BATTERING_RAM_TURN_COUNTER
[event]
	name=new turn
	first_time_only=no
	[if]
		[have_unit]
			x=8
			y=12
			type=Ancient Wose
			description=Battering Ram
		[/have_unit]
		[then]
			[set_variable] 
				name=brtc
				add=1
			[/set_variable] 
		[/then]
	[/if]
	[if]
		[variable]
			name=brtc
			equals_to=2
		[/variable]
		[then]
			{VARIABLE_SET gates 0}
			[terrain]
			x=8,9
			y=11,12
			letter=u
			[/terrain]
		[/then]
	[/if]
[/event]
#enddef

#define OPEN_GATES X Y
[event]
name=moveto
first_time_only=no
[filter]
x={X}
y={Y}
[/filter]
[terrain]
x=8
y=11
letter=u
[/terrain]
[terrain]
x=9
y=12
letter=u
[/terrain]
[/event]
#enddef

#define CLOSE_GATES X Y
[event]
name=moveto
first_time_only=no
[filter]
x={X}
y={Y}
[/filter]

[if]
[variable]
name=gates
euqals=1
[/variable]
[then]
[terrain]
x=8
y=11
letter=W
[/terrain]
[terrain]
x=9
y=12
letter=W
[/terrain]
[/then]
[/if]
[/event]
#enddef

#################################################

{SIDE_SET 1}
{SIDE_SET 2}
{SIDE_SET 3}

[event] 
name=prestart

{VARIABLE_SET gates 1}
{VARIABLE_SET brtc 1}

{START_OFFENSIVE_UNITS 8 19 2}
{START_OFFENSIVE_UNITS 14 21 3}

{WALL_GUARD 1 8}
{WALL_GUARD 3 9}
{WALL_GUARD 5 10}
{WALL_GUARD 7 11}
{WALL_GUARD 10 12}
{WALL_GUARD 12 13}
{WALL_GUARD 14 13}
{WALL_GUARD 16 12}
{WALL_GUARD 18 11}
{WALL_GUARD 20 10}

{WALL_GUARD 12 10}
{WALL_GUARD 14 10}
{WALL_GUARD 8 7}
{WALL_GUARD 9 9}
{WALL_GUARD 8 4}
{WALL_GUARD 9 3}
{WALL_GUARD 12 1}
{WALL_GUARD 14 1}
{WALL_GUARD 17 3}
{WALL_GUARD 18 4}
{WALL_GUARD 18 7}
{WALL_GUARD 17 9}

{UNIT_SET Swordsman 1 7 12}
{UNIT_SET Swordsman 1 9 13}

{UNIT_SET (Shock Trooper) 1 6 11}
{UNIT_SET (Shock Trooper) 1 10 13}

[/event]

{LABEL 11 9 ("Open gate")}
{LABEL 15 9 ("Close gate")}
{LABEL 5 25 ("Buy ladder")}
{LABEL 12 27 ("Buy ladder")}

{BUY_LADDER 5 25 8 19}
{BUY_LADDER 12 27 14 21}

{LADDER_PLACE 1 9}
{LADDER_PLACE 2 9}
{LADDER_PLACE 3 10}
{LADDER_PLACE 4 10}
{LADDER_PLACE 5 11}
{LADDER_PLACE 11 14}
{LADDER_PLACE 12 14}
{LADDER_PLACE 13 15}
{LADDER_PLACE 14 14}
{LADDER_PLACE 15 14}
{LADDER_PLACE 16 13}
{LADDER_PLACE 17 13}
{LADDER_PLACE 18 12}
{LADDER_PLACE 19 12}
{LADDER_PLACE 20 11}

{OPEN_GATES 11 9}
{CLOSE_GATES 15 9}
{BATTERING_RAM_TURN_COUNTER}

[/multiplayer]
Last edited by Tomsik on December 30th, 2005, 6:30 pm, edited 1 time in total.
User avatar
zookeeper
WML Wizard
Posts: 9742
Joined: September 11th, 2004, 10:40 pm
Location: Finland

Post by zookeeper »

Code: Select all

#define CLOSE_GATES X Y
[event]
name=moveto
first_time_only=no
[if]
[variable]
name=gates
euqals=1
[/variable]
[then]
[filter]
x={X}
y={Y}
[/filter]
...
Find the typo. :wink: And the [filter] shouldn't be inside the [if], right?

Also, [terrain] in BATTERING_RAM_TURN_COUNTER should be closed:

Code: Select all

    [if]
      [variable]
         name=brtc
         equals_to=2
      [/variable]
      [then]
         {VARIABLE_SET gates 0}
         [terrain]
         x=8,9
         y=11,12
         letter=u
      [/then] 
User avatar
Tomsik
Posts: 1401
Joined: February 7th, 2005, 7:04 am
Location: Poland

Post by Tomsik »

Fixed this things, but on start of every turn gates opens!

P.S.: I edited code in previous post to things i have now.
scott
Posts: 5243
Joined: May 12th, 2004, 12:35 am
Location: San Pedro, CA

Post by scott »

You mispelled equals in a [variable] tag near the bottom. Search for euqals.
Also, you should use numerical_equals=1 inside those.
Hope springs eternal.
Wesnoth acronym guide.
User avatar
Tomsik
Posts: 1401
Joined: February 7th, 2005, 7:04 am
Location: Poland

Post by Tomsik »

Now everythings work fine, thanks! :)
Shardan
Posts: 3
Joined: September 9th, 2005, 1:25 pm
Location: Torino, Italy

Post by Shardan »

where i can take this map??
Shardan
Custos Sapientiae
Custos Sacri Nexus
Post Reply