|
meddlesome Wanderer
Joined: 24 Aug 2012 Posts: 70
|
Posted: Mon Sep 10, 2012 3:55 pm
[SOLVED] What gives with this #IF? |
Code: |
#if (@counter > 1) {#LOOP 1, @counter {EXAMINE %{i}.CORPSE}} {EXAMINE CORPSE} |
counter declared integer
I get a...
Quote: |
ERROR: Trigger "ou are awarded &{XP}" fired but did not compile |
I just don't want EXAMINE 1.CORPSE going to the MUD. That's ugly code. |
|
Last edited by meddlesome on Mon Sep 10, 2012 4:32 pm; edited 1 time in total |
|
|
|
Rahab Wizard
Joined: 22 Mar 2007 Posts: 2320
|
Posted: Mon Sep 10, 2012 4:10 pm |
Is that the entire trigger? This code isn't using @XP, so I suspect it is not. I don't see anything
obiously wrong with that particular line, but I don't have Cmud on this machine to check whether
it compiles. What makes you think that line is the problem?
It might be best to give the entire trigger so we can see the entire thing. The best way to do
it is to click the XML tab at the bottom of the Package Editor and cut and paste all of the XML. |
|
|
|
meddlesome Wanderer
Joined: 24 Aug 2012 Posts: 70
|
Posted: Mon Sep 10, 2012 4:15 pm |
@XP is used on a statusbar, but It wasn't the trigger line that was an issue. It worked fine when I just had that #LOOP. It started this when I added the #IF to get rid of the EXAMINE 1.CORPSE.
|
|
_________________ Intel Core 2 Quad Q9450 @2.66GHz
MDAC 2.8 SP1 ON WINDOWS XP SP3
Msjet40.dll ver 4.0.9511.0 + Security Bulletin MS08-028
CMUD v237
Order number: **7829 |
|
|
|
meddlesome Wanderer
Joined: 24 Aug 2012 Posts: 70
|
Posted: Mon Sep 10, 2012 4:17 pm |
It even shows this in the package editor under the compiled code tab...
Quote: |
Error compiling script:
illegal character in expression: |
|
|
|
|
meddlesome Wanderer
Joined: 24 Aug 2012 Posts: 70
|
Posted: Mon Sep 10, 2012 4:23 pm |
Figured it out. The #LOOP 1, @counter was the issue. Seems the variable got moved over a space. #LOOP 1,@counter works.
|
|
_________________ Intel Core 2 Quad Q9450 @2.66GHz
MDAC 2.8 SP1 ON WINDOWS XP SP3
Msjet40.dll ver 4.0.9511.0 + Security Bulletin MS08-028
CMUD v237
Order number: **7829 |
|
|
|
Anaristos Sorcerer
Joined: 17 Jul 2007 Posts: 821 Location: California
|
Posted: Thu Sep 13, 2012 12:43 am |
Since #LOOP 1,1 {...} does nothing, there is no need to check. If you are going to check at all, check to make sure @counter is not less than 1.
Code: |
#IF (@counter) {#LOOP 1,@counter {....}
|
|
|
_________________ Sic itur ad astra. |
|
|
|
Daern Sorcerer
Joined: 15 Apr 2011 Posts: 809
|
Posted: Thu Sep 13, 2012 2:39 am |
Huh? That makes no sense. First of all, #LOOP 1,1 {...} doesn't do nothing, it loops once with 1 as %i, and second, your code doesn't make sure @counter is not less than 1, it just checks that it's not zero. There's nothing wrong with his code (except the fixed syntax error, of course).
|
|
|
|
Mumra Wanderer
Joined: 12 Feb 2003 Posts: 93 Location: USA
|
Posted: Wed Sep 19, 2012 12:56 am |
Meddlesome, the #LOOP 1, @counter with a space should work. I use it that way constantly.
Code: |
#if (@counter > 1) {#LOOP 1, @counter {EXAMINE %{i}.CORPSE}} {EXAMINE CORPSE}
|
Is what you have written, why do you have {} around the i? you don't need those at all. just %i.corpse should work, I have a similar set of scripts here myself. |
|
_________________ Mumra the Everliving, Realms of Despair
216.251.47.10 Port 4000 |
|
|
|
Daern Sorcerer
Joined: 15 Apr 2011 Posts: 809
|
Posted: Wed Sep 19, 2012 2:12 am |
#LOOP cannot have a space between the range values. Just a simple "#LOOP 1, 10 {}" is enough to prove that - enter it on your command line and you'll see you get an error. The {} is required to have the dot act as a literal rather than the member of operator. %i.CORPSE would look for the CORPSE key in the %i database variable and return the value, which would obviously always be null since %i will always just be a number. Personally, I would write it like this:
Code: |
#if (@counter > 1) {#LOOP 1,@counter {#SEND %concat( "EXAMINE ", %i, ".CORPSE")}} {#SEND "EXAMINE CORPSE"} |
That's a more reliable way of using the dot literally, but there's nothing wrong with the brace trick to prevent the expansion, especially with simple scripts like this. |
|
|
|
Mumra Wanderer
Joined: 12 Feb 2003 Posts: 93 Location: USA
|
Posted: Wed Sep 19, 2012 2:22 am |
Perhaps the %i isn't checking the database because I do not have one loaded? but I can run for example
#loop 1,5 {examine %i.corpse}
and get
examine 1.corpse
examine 2.corpse
examine 3.corpse
examine 4.corpse
examine 5.corpse
I guess it is good to know for the future.. as I'm debating using the DB. |
|
_________________ Mumra the Everliving, Realms of Despair
216.251.47.10 Port 4000 |
|
|
|
Daern Sorcerer
Joined: 15 Apr 2011 Posts: 809
|
Posted: Wed Sep 19, 2012 2:50 am |
I'm talking about normal key=value pair database variables, not the database module. The var.key syntax was added early in v3, if you're still using 2.37 you wouldn't have this issue.
|
|
|
|
|
|