  | 
	
	
	
		Lench Beginner
 
  Joined: 26 Jan 2004 Posts: 21 Location: Norway
  | 
		
		  
			
			   Posted: Sun Feb 06, 2005 12:10 pm   
  Trigger with variables.   | 
			 
			
				i made a trigger like this
 
 
#trigger %1's wounds start to bleed.
 
#if (%1=@variable1) {dothis}
 
#if (%1=@variable2) {dothat}
 
#if (%1=@variable3) {dothis instead}
 
 
what happened was that regardless of wether %1 matched a variable, all if tests reported TRUE and ran their dothis dothat and dothis instead.
 
 
Wich wasnt exactly what i planned....
 
 
Ideas? | 
			 
		  | 
	
	
	  
		  
		    
			  _________________   | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		Guinn Wizard
 
  Joined: 03 Mar 2001 Posts: 1127 Location: London
  | 
		
		  
			
			   Posted: Sun Feb 06, 2005 4:57 pm      | 
			 
			
				You should be using %w rather than %1 to match a name.
 
 
Try the following
 
#trigger {(%w)'s wounds start to bleed.} {#if (%1=@variable1) {dothis};#if (%1=@variable2) {dothat};#if (%1=@variable3) {dothis instead}} | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ CMUD Pro, Windows Vista x64
 
Core2 Q6600, 4GB RAM, GeForce 8800GT
 
Because you need it for text... ;) | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		MattLofton GURU
 
  Joined: 23 Dec 2000 Posts: 4834 Location: USA
  | 
		
		  
			
			   Posted: Sun Feb 06, 2005 8:05 pm      | 
			 
			
				What did it match on?  ZMud generally doesn't verify the variable contents before doing the evaluation, so without quotes it will only use the 1-word value adjacent to the comparison sign (in this case, =):
 
 
Ted Kennedy = @President evalatuates to either Ted 0  (the word Kennedy is not contained in @President) or Ted 1 (the word Kennedy is contained in @President).  Since "Ted 0" nor "Ted 1" = 0, the whole thing always evaluates to True. | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ EDIT: I didn't like my old signature | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		a5hi5m Beginner
 
  Joined: 04 Mar 2004 Posts: 24 Location: Australia
  | 
		
		  
			
			   Posted: Sun Feb 06, 2005 9:58 pm      | 
			 
			
				If only 1 of the if statements should come true, you could nest them in some sort of order, such as ..
 
 
#trigger {(%w)'s wounds start to bleed. } {#if (%1=@variable1) {dothis} {#if (%1=@variable2) {dothat} {#if (%1=@variable3) {dothis instead} {#noop} }}} | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ Smoking@BatMUD | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		LightBulb MASTER
 
  Joined: 28 Nov 2000 Posts: 4817 Location: USA
  | 
		
		  
			
			   Posted: Mon Feb 07, 2005 12:56 am      | 
			 
			
				What Matt is saying is that you need to put some kind of delimiter, such as double-quotes, around %1 in the #IF conditions. Otherwise, if %1 is longer than one word (contains spaces) then your #IF conditions will always evaluate to true and all the commands will be done. Since you used %1 in the pattern, which is the equivalent of *, your pattern can and will match any number of words.
 
 
	  | Code: | 
	 
	
	  #trigger {(*)'s wounds start to bleed.} {
 
#if ("%1"=@variable1) {dothis} 
 
#if ("%1"=@variable2) {dothat} 
 
#if ("%1"=@variable3) {dothis instead}} | 
	 
 
 | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ LightBulb
 
Senior member
 
 
Most scripts in this forum are written for Command Line entry. 
 
Don't even open the Settings Editor unless its use is specified or obvious. | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		| 
		
		 | 
	
	
		 |