| Author | 
            Message | 
        
        
			| 
				
				 MaximDude 
				
				
					 Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
				 
				 
			 | 
			
				
				  Accessing attached emitters  
					
						Recently got back to modding and all that and i'm really rusty, more than ever really.
  Anyway, now with all the new lua shenanigans of B25, what I was trying to make back in B24 should work right, buuuuuut.... It doesn't, obviously, because I knew ♥♥♥♥ in lua back then, and I know even less now.
  Soooooo.... How can one access an emitter that is attached to another attachable and mess around with it's RotAngle? If that's even possible... 
					
  
			 | 
		
		
			| Wed Aug 24, 2011 7:24 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						First, the emitter has to have GetsHitByMOs = 1 if you want to be able to mess around with it. Then you just run through all MOIDs, find which one has the emitter's PresetName and has the RootID of your object, and then you have access to the emitter. 
					
  
			 | 
		
		
			| Wed Aug 24, 2011 8:33 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 MaximDude 
				
				
					 Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						Thus, something along the lines of: Code: for i = 1,MovableMan:GetMOIDCount()-1 do    self.otherblah = MovableMan:GetMOFromID(i);    if self.otherblah.PresetName == "otherblah" and self.otherblah.ClassName == "AEmitter" and self.otherblah.RootID == self.ID then       for i = 1,MovableMan:GetMOIDCount()-1 do          self.blah = MovableMan:GetMOFromID(i);          if self.blah.PresetName == "blah" and self.blah.ClassName == "AEmitter" and self.blah.RootID == self.ID then             self.blah.RotAngle = self.otherblah.RotAngle;          end          end    end    end
  'Blah' being the attached-to-attachable emitter, and 'otherblah' being another emitter that is attached to the parent.  If so, then strangely enough, it's a no go. No errors in the console, but no effect either.  
					
  
			 | 
		
		
			| Wed Aug 24, 2011 10:11 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						I don't see why you would need to check for the attachable. Code:    for i = 1, MovableMan:GetMOIDCount()-1 do       local part = MovableMan:GetMOFromID(i);       if part.PresetName == "Some Emitter Name" and part.ClassName == "AEmitter" and part.RootID == self.RootID then          <stuff>          break;       end    end
   
					
  
			 | 
		
		
			| Thu Aug 25, 2011 1:24 am | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 MaximDude 
				
				
					 Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						Seems that attached-to-attachable emitters do not have MOIDs (According to the MOID view). Any other way to access them? 
					
  
			 | 
		
		
			| Mon Sep 12, 2011 7:53 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						They're only accessible using MOID tricks if they're GetsHitByMOs = 1. MaximDude wrote: Any other way to access them? You could have a script attached to the emitter that drops a pointer of it into a global table, and your main script can grab the emitter off of that.  
					
  
			 | 
		
		
			| Mon Sep 12, 2011 8:28 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 MaximDude 
				
				
					 Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						Yeah, but it is GHBM = 1, that's the issue... About the pointer blah blah, no idea what and how... :/ 
					
  
			 | 
		
		
			| Mon Sep 12, 2011 10:03 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
			| 
				
				 CaveCricket48 
				
				
					 Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
				 
				 
			 | 
			
				
				  Re: Accessing attached emitters  
					
						So pretty much on your emitter, you have something like this: Code: function Create(self)
     if globalAttaTable == nil then       globalAttaTable = {};    end
     if self.RootID ~= self.ID then       local secondaryAttaTable = {};       secondaryAttaTable[1] = MovableMan:GetMOFromID(self.RootID);       secondaryAttaTable[2] = self;       globalAttaTable[#globalAttaTable+1] = secondaryAttaTable;    end
  end
  And on your root body, you have this: Code: function Create(self)
     self.listNumTable = {};    self.attaTable = {};
  end
  function Update(self)
     if self.grabbedAtta == nil then       self.grabbedAtta = false;    else       if self.grabbedAtta == false then          self.grabbedAtta = true;          if globalAttaTable ~= nil then             for i = 1, i < #globalAttaTable do                if globalAttaTable[i][1] ~= nil and globalAttaTable[i][1].ID == self.ID then                   self.attaTable[#self.attaTable+1] = globalAttaTable[i][2];                   self.listNumTable[#self.listNumTable+1] = i;                end             end          end
        end    end
  end
  function Destroy(self)
     for i = 1, i < #self.listNumTable do       globalAttaTable[self.listNumTable[i]][1] = nil;       globalAttaTable[self.listNumTable[i]][2] = nil;    end
  end
  All of the attached things should be in self.attaTable after the first frame the script has run (so that means do a check on the attachables before you try to access them). Edit: Whoops, a few typos in there.  
					
  
			 | 
		
		
			| Mon Sep 12, 2011 10:31 pm | 
			
				
					 
					
					 
				  
			 | 
    	
		
	
	
		  | 
	
	
	
		 |