ghype's Problems:
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.
Re: ghype's Problems: {DROP_GOLD_ON_KILL}
So as announced, I played further around with the ability and tried to expand it. I wanted to add another variable. Not only should it be a weighted percentage how much gold is dropped, but whether or not gold drops at all should be also decided by a variable. For that I defined this.
Here is also the ability which WhiteWolf contributed to. The only things I changed is:
as simple as this one seems, It still drops gold on every kill (tried it multiple times to exclude the probability that it still drops every time against the odds). I suppose something is wrong with my conditional structure.
Should the multiple
Or is just becoming "too nested" ?
Code: Select all
#define DROP_GOLD_ON_KILL
[event]
name=last breath
first_time_only=no
[filter]
side=2
[/filter]
[if]
[variable]
name=$second_unit.level
less_than_equal_to=1
[/variable]
[then]
{VARIABLE_OP coins_prob rand (0,0,0,1)}
[if]
[variable]
name=coins_prob
equals=1
[/variable]
[then]
{DROP_GOLD_ON_KILL_EVENT}
[/then]
[/if]
[/then]
[/if]
[if]
[variable]
name=$second_unit.level
equals=2
[/variable]
[then]
{VARIABLE_OP coins_prob rand (0,0,1)}
[if]
[variable]
name=coins_prob
equals=1
[/variable]
[then]
{DROP_GOLD_ON_KILL_EVENT}
[/then]
[/if]
[/then]
[/if]
[if]
[variable]
name=$second_unit.level
greater_than_equal_to=3
[/variable]
[then]
{VARIABLE_OP coins_prob rand (0,1)}
[if]
[variable]
name=coins_prob
equals=1
[/variable]
[then]
{DROP_GOLD_ON_KILL_EVENT}
[/then]
[/if]
[/then]
[/if]
{CLEAR_VARIABLE coins_prob}
[/event]
- the name -
DROP_GOLD_ON_KILL
is now calledDROP_GOLD_ON_KILL_EVENT
- name is now
last breath
instead ofdie
so the new one triggers before this one
- added the missing
|
in all the$coins
Code: Select all
#define DROP_GOLD_ON_KILL_EVENT
[event]
name=die
first_time_only=no
[filter]
side=2
# note: $x1,$y1 doesn't do anything here
[/filter]
[item]
image=items/gold-coins-small.png
x,y=$x1,$y1
[/item]
[event]
name=moveto
delayed_variable_substitution=no # has to be explicitly set to no to substitute value of x y at creation time (not trigger time!)
[filter]
x,y=$x1,$y1
[/filter]
{VARIABLE_OP coins rand (1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6)}
[gold]
side=$|unit.side # the | is important after the $ sign, because this is substituted in trigger time.
amount=$|coins
[/gold]
[floating_text] # using floating_text instead of an unstore_unit might be a better idea
x,y=$x1,$y1
text=_ "<span color='yellow'>+ $|coins Gold</span>" # it does require pango to get a red+green text though.
[/floating_text]
[sound]
name=gold.ogg
[/sound]
{CLEAR_VARIABLE coins}
[remove_item]
x=$x1
y=$y1
[/remove_item]
[/event]
[/event]
#enddef
Should the multiple
[if]
-tags I have be defined in each other and [elseif]
used?Or is just becoming "too nested" ?
stuff I worked on: Dunefolk Rework - ghype's Daily Art
Re: ghype's Problems: {DROP_GOLD_ON_KILL}
I suspect number-only variable names are not supported.
name=$second_unit.level
name=$second_unit.level
Re: ghype's Problems: {DROP_GOLD_ON_KILL}
I sense a bit of confusion about what's a nested event and what's a fired event.
Because
How to explain while staying concise... A nested event, which this is, gets created at the point when the code gets there, but is not executed there! To execute another event at one point, you need a
This:
Is a nested event.
This:
is a fired event. The turn 10 event immediately fires and executes the #stuff in trigger, so it's almost like a function call.
In the coin dropping, I used a nested event, because after the unit dies, I wanted to create an event that will fire later, when a unit moves there. That's what it's good for.
So the variables and changes should be implemented in the first outer event. But this event should be [scenario]-level, it shouldn't be nested into yet another layer because that won't work.
To add your conditions is just something like this:
I didn't make it concise did I. Oh well.
Because
{DROP_GOLD_ON_KILL_EVENT}
cannot be called like that. In this context it nests the events at that point, but I think you mean to fire it instead.How to explain while staying concise... A nested event, which this is, gets created at the point when the code gets there, but is not executed there! To execute another event at one point, you need a
[fire_event]
call. You can think of this as a proper function call, it's somewhat analogous.This:
Code: Select all
[event]
name=turn 10
[event] # this event is created here. It will fire the next time a unit moves somewhere, but not immediately.
name=moveto
# stuff
[/event]
# here at this point "stuff" is NOT EXECUTED YET
[/event]
and is (in functionality) equivalent to this:
Code: Select all
[event]
name=turn 10
[fire_event]
id=trigger
[/fire_event]
# by this point here, "stuff" is ALREADY EXECUTED!
[/event]
[event]
name=COULD BE ANYTHING
id=trigger
#stuff
[/event]
In the coin dropping, I used a nested event, because after the unit dies, I wanted to create an event that will fire later, when a unit moves there. That's what it's good for.
So the variables and changes should be implemented in the first outer event. But this event should be [scenario]-level, it shouldn't be nested into yet another layer because that won't work.
To add your conditions is just something like this:
Code: Select all
#define DROP_GOLD_ON_KILL
[event]
name=die
first_time_only=no
[filter]
side=2
[/filter]
# CONDITIONS added here:
[switch] # switch may be better here than if-elseif-elseif... chains, but it's just aesthetics.
variable=second_unit.level
[case]
value=1
{VARIABLE_OP coins_prob rand (0,0,0,1)}
[/case]
[case]
value=2
{VARIABLE_OP coins_prob rand (0,0,1)}
[/case]
[else]
{VARIABLE_OP coins_prob rand (0,1)}
[/else]
[/switch]
[if]
[variable]
name=coins_prob
equals=0
[/variable]
[then]
[return] # immediately exit this event, nothing below is executed - no coin is dropped.
[/return]
[/then]
[/if]
# if we got to this point, we know that couns_prob must be 1.
# So just carry on with the coin dropping, which is the code from before.
[item]
image=items/gold-coins-small.png
x,y=$x1,$y1
[/item]
[event]
name=moveto
delayed_variable_substitution=no # has to be explicitly set to no to substitute value of x y at creation time (not trigger time!)
[filter]
x,y=$x1,$y1
[/filter]
{VARIABLE_OP coins rand (1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6)}
[gold]
side=$|unit.side # the | is important after the $ sign, because this is substituted in trigger time.
amount=$|coins
[/gold]
[floating_text] # using floating_text instead of an unstore_unit might be a better idea
x,y=$x1,$y1
text=_ "<span color='yellow'>+ $|coins Gold</span>" # it does require pango to get a red+green text though.
[/floating_text]
[sound]
name=gold.ogg
[/sound]
{CLEAR_VARIABLE coins}
[remove_item]
x=$x1
y=$y1
[/remove_item]
[/event]
[/event]
#enddef
Main UMC campaigns: The Ravagers - now for 1.16, with new bugs!
Old UMC works: The Underness Series, consisting of 5 parts: The Desolation of Karlag, The Blind Sentinel, The Stone of the North, The Invasion Of The Western Cavalry, Fingerbone of Destiny
Old UMC works: The Underness Series, consisting of 5 parts: The Desolation of Karlag, The Blind Sentinel, The Stone of the North, The Invasion Of The Western Cavalry, Fingerbone of Destiny
Re: ghype's Problems: {DROP_GOLD_ON_KILL}
Hey man, I just wanted to tell you again, thank you for your support helping me through this (WML). You last version of code works! I am working on something big (but not overwhelming) this was a keypart for that.
stuff I worked on: Dunefolk Rework - ghype's Daily Art