| Author | 
            Message | 
         
        
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Lua on shield help?  
					
						So I got this code: Code: function Create(self)    for i = 1, MovableMan:GetMOIDCount()-1 do       local shield = MovableMan:GetMOFromID(i);       if shield.ClassName == "HeldDevice" and shield.PresetName == "Blast Shield" then          self.parent = MovableMan:GetMOFromID(shield.RootID);          if MovableMan:IsActor(self.parent) then             self.parent = ToAHuman(self.parent);          end       end    end
     --self.walltimer = Timer();
  end
  function CreateBeamWall(self, n)    for i = -n, n do       self.wall.n = CreateMOPixel("shieldbeam");       self.wall.n.HFlipped = self.HFlipped;       if self.HFlipped == true then       self.wall.n.Pos = self.Pos + Vector(10,n):RadRotate(self.RotAngle);       else       self.wall.n.Pos = self.Pos - Vector(10,n):RadRotate(self.RotAngle);       end       self.wall.n.Vel = self.Vel + Vector(5,n):RadRotate(self.RotAngle);       MovableMan:AddParticle(self.wall.n);    end end
  function Update(self)    if self.parent.PresetName == "'Anubis'-class Unit" and self.parent.actionphase == 2 then --   if self.Vel == Vector(60,0):RadRotate(self.RotAngle) then       self.RotAngle = self.parent.RotAngle;       CreateBeamWall(self, 50);
     end end but it spams errors that self.parent is nil. How do I fix it? How do I find its parent without resorting to distance checks? BTW, it's so that when it's held by an 'Anubis'-class Unit, and the actor activates a Lua 'skill', it emits a blastwave in front of itself.  
					
  
			 | 
		 
		
			| Sat Oct 22, 2011 5:53 pm | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						This script is directly attached to the shield, yes?
  Edit: Goddamn ninja. 
					
							
  
							
    							Last edited by CaveCricket48 on Sat Oct 22, 2011 6:00 pm, edited 1 time in total. 
    						 
						
  
			 | 
		 
		
			| Sat Oct 22, 2011 5:59 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						CaveCricket48 wrote: This script is directly attached to the shield, yes? Yep.  
					
  
			 | 
		 
		
			| Sat Oct 22, 2011 5:59 pm | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Alright, Non's script should work then. 
					
  
			 | 
		 
		
			| Sat Oct 22, 2011 6:00 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Allright, Non's script generates no errors... but the shield wall doesn't appear at all. Here's the new code. Code: --[[function Create(self)    for i = 1, MovableMan:GetMOIDCount()-1 do       local shield = MovableMan:GetMOFromID(i);       if shield.ClassName == "HeldDevice" and shield.PresetName == "Blast Shield" then          self.parent = MovableMan:GetMOFromID(shield.RootID);          if MovableMan:IsActor(self.parent) then             self.parent = ToAHuman(self.parent);          end       end    end
     --self.walltimer = Timer();
  end ]] function CreateBeamWall(self, n)    for i = -n, n do       self.wall.n = CreateMOPixel("shieldbeam");       self.wall.n.HFlipped = self.HFlipped;       if self.HFlipped == true then       self.wall.n.Pos = self.Pos + Vector(20,n):RadRotate(self.RotAngle);       else       self.wall.n.Pos = self.Pos - Vector(20,n):RadRotate(self.RotAngle);       end       self.wall.n.Vel = self.Vel + Vector(5,n):RadRotate(self.RotAngle);       MovableMan:AddParticle(self.wall.n);    end end
  function Update(self)    self.actor = MovableMan:GetMOFromID(self.RootID);    if MovableMan:IsActor(self.actor) then    self.parent = ToActor(self.actor);    self.Work = true;    else    self.Work = false;    end
  if self.Work == true then    if self.parent.PresetName == "'Anubis'-class Unit" and self.parent.actionphase == 2 then --   if self.parent.PresetName == "'Anubis'-class Unit" and self.Vel == Vector(60,0):RadRotate(self.RotAngle) then --   if self.Vel == Vector(60,0):RadRotate(self.RotAngle) then       self.RotAngle = self.parent.RotAngle;       CreateBeamWall(self, 50);
     end end end Is it the CreateBeamWall that didn't work? should I add ToDelete and ToSettle = false?  
					
  
			 | 
		 
		
			| Sat Oct 22, 2011 6:18 pm | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						I don't think you made your CreateBeamWall function correctly. Functions are (roughly) formatted like: Code: FunctionName(argument1, argument2, [...])    <stuff>    return <value> end
  Edit: Disregard this, I misread the code.  
					
							
  
							
    							Last edited by CaveCricket48 on Sat Oct 22, 2011 10:47 pm, edited 1 time in total. 
    						 
						
  
			 | 
		 
		
			| Sat Oct 22, 2011 6:30 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 zoidberg 
				
				
					 Joined: Fri Feb 25, 2011 3:52 pm Posts: 39
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Code: function CreateBeamWall(self, n)    for i = -n, n do       local wall = CreateMOPixel("shieldbeam")       if self.HFlipped then          wall.Pos = self.Pos + Vector(20, n):RadRotate(self.RotAngle)       else          wall.n.Pos = self.Pos - Vector(20, n):RadRotate(self.RotAngle)       end       wall.Vel = self.Vel + Vector(5, n):RadRotate(self.RotAngle)       MovableMan:AddMO(wall)    end end this should work. (i don't think that pixels can be hflipped, and that's not the only thing) edit: also, you can't access parent's variables (actionphase, in your case) this way, afaik. store var in sharpness, or anything else, or use kyred's method.  
					
  
			 | 
		 
		
			| Sat Oct 22, 2011 9:36 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						zoidberg wrote: also, you can't access parent's variables (actionphase, in your case) this way, afaik. store var in sharpness, or anything else, or use kyred's method. Hmm, weird, since in another mod-in-development I can successfully 'inherit' a missile's team to its lua-generated splinters, which meant I could 'write' from one lua code into another lua code. But just in case, I wanna know of kyred's method; care to point me in the thread's direction?  
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 5:55 am | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 TheLastBanana 
				DRL Developer 
				
					 Joined: Wed Dec 13, 2006 5:27 am Posts: 3138 Location: A little south and a lot west of Moscow
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Kyred's method is detailed  here. It involves sifting through large tables, so it's not exactly the fastest, but it does let you access variables in other scripted objects. The only variables you can access "normally" are ones defined by the game itself, like Sharpness, HFlipped, Mass, or, as mentioned, Team.  
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 7:15 am | 
			
				
					 
					
					 
				    
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Hmm, thanks... I think I'll make it activate if it goes over a certain speed, but just doing Code: if self.Vel >= Vector(n,0):RadRotate(self.RotAngle) then spams error about vectors. Any way to fix this part?  
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 8:03 am | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 zoidberg 
				
				
					 Joined: Fri Feb 25, 2011 3:52 pm Posts: 39
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Nonsequitorian wrote: zoidberg wrote: (i don't think that pixels can be hflipped, and that's not the only thing)
  Why not, Zoidberg? errr... fliping a pixel... it has no front, no back, no rotangle. i can't believe that it could be flipped. carriontrooper wrote: Hmm, thanks... I think I'll make it activate if it goes over a certain speed, but just doing Code: if self.Vel >= Vector(n,0):RadRotate(self.RotAngle) then spams error about vectors. Any way to fix this part? if you put it in update function, then you just haven't "n" defined. and i don't get the point of this check. also, i don't remember correctly, but i think you can't compare vectors like that 
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 9:36 am | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 carriontrooper 
				
				
					 Joined: Mon Apr 13, 2009 12:27 pm Posts: 813 Location: Yogyakarta, Indonesia. A slice o' paradise.
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Yeah, I got it working now. It will generate loads of awesome when I release it in my SET mod, thanks all! one hint: OOH YEEEAH! 
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 9:50 am | 
			
				
					 
					
					 
				      
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 TheLastBanana 
				DRL Developer 
				
					 Joined: Wed Dec 13, 2006 5:27 am Posts: 3138 Location: A little south and a lot west of Moscow
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						No, that's not how it works. Zoidberg is right. Take a look at the Lua documentation for  MOSprite. HFlipped and RotAngle are defined as properties of an MOSprite.  MOSParticles descend from MOSprite (hence the "MOS" instead of "MO"), meaning they inherit those properties. On the other hand,  MOPixels descend directly from MovableObject, meaning that they don't have those properties. You can set those properties, but it stores them in the same way as if you did "self.myVariable = 4" - that is, it won't be accessible by other scripted objects because it's a user-defined property instead of a hardcoded one.  
					
  
			 | 
		 
		
			| Sun Oct 23, 2011 7:50 pm | 
			
				
					 
					
					 
				    
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 Kyred 
				
				
					 Joined: Sun May 31, 2009 1:04 am Posts: 308
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						TheLastBanana wrote: Kyred's method is detailed  here. It involves sifting through large tables, so it's not exactly the fastest, but it does let you access variables in other scripted objects. The only variables you can access "normally" are ones defined by the game itself, like Sharpness, HFlipped, Mass, or, as mentioned, Team.  Well, if you want to be technical, referencing most variables in LUA involves tables.  Also, that took a while to figure out    
					
  
			 | 
		 
		
			| Mon Nov 07, 2011 7:27 am | 
			
				
					 
					
					 
				  
			 | 
    	
		 
	
	
		  | 
	 
	
			| 
				
				 TheLastBanana 
				DRL Developer 
				
					 Joined: Wed Dec 13, 2006 5:27 am Posts: 3138 Location: A little south and a lot west of Moscow
				 
				 
			 | 
			
				
				  Re: Lua on shield help?  
					
						Heh, true, although (at least as far as I remember) those tables don't empty themselves, so as the game goes on, it gets slower to look up objects in it. Maybe that was only when PresetMan:ReloadAllScripts is called, though - it's been a while since I've used that technique. 
					
  
			 | 
		 
		
			| Mon Nov 07, 2011 6:51 pm | 
			
				
					 
					
					 
				    
			 | 
    	
		 
	
	
		  | 
	 
	
	
		 | 
	 
	
	 
	
	
 
	 
	
	
		Who is online | 
	 
	
		Users browsing this forum: No registered users  | 
	 
	 
 
	 | 
	You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
  | 
 
 
 
 
	 |