View unanswered posts | View active topics It is currently Sat Dec 28, 2024 4:28 pm



Reply to topic  [ 7 posts ] 
 Accessing variables in AI 
Author Message

Joined: Sun Oct 23, 2011 7:57 am
Posts: 23
Reply with quote
Post Accessing variables in AI
How would one access variables declared in the AI code.

It says that the variable is a nil value, and it can't access it.

<DropShipAI.lua>
Code:
self.searchedForEngines = true
      local MoObj
      for i = 1, MovableMan:GetMOIDCount()-1 do
         if MovableMan:GetRootMOID(i) == self.ID then   -- an obj without a parent has ID == RootID
            MoObj = MovableMan:GetMOFromID(i)
            if MoObj.PresetName == "Drop Ship Engine A" then
               self.LeftEngine = ToAEmitter(MoObj)
            elseif MoObj.PresetName == "Drop Ship Engine B" then
               self.RightEngine = ToAEmitter(MoObj)
            end
            
            if self.LeftEngine and self.RightEngine then
              break
            end
         end
       end      
      
       if not (self.LeftEngine and self.LeftEngine:IsAttached())then
         ConsoleMan:PrintString("No left Engine")
         self.LeftEngine = nil
      end      
       if not (self.RightEngine and self.RightEngine:IsAttached()) then
         ConsoleMan:PrintString("No right Engine")
         self.RightEngine = nil
       end


<DropShipDock.lua>
Code:
function self:EnableEngines (engage)
      if engage then
      ConsoleMan:PrintString("Attempting to engage engines")
         --if self.Ship.LeftEngine then
               self.Ship.LeftEngine:EnableEmission(true)
               ConsoleMan:PrintString("Left Engine Engaged")
            --end
         --if self.Ship.RightEngine then
            self.Ship.RightEngine:EnableEmission(true)
            ConsoleMan:PrintString("Right Engine Engaged")
         --end
      else
         ConsoleMan:PrintString("Attempting to shut down engines")
         --if self.Ship.LeftEngine then
            self.Ship.LeftEngine:EnableEmission(false)
            ConsoleMan:PrintString("Left Engine Disabled")
         --end
         --if self.Ship.RightEngine then
            self.Ship.RightEngine:EnableEmission(false)
            ConsoleMan:PrintString("Right Engine Disabled")
         --end
      end
   end


Mon Nov 14, 2011 10:12 pm
Profile
Data Realms Elite
Data Realms Elite
User avatar

Joined: Tue May 25, 2010 8:27 pm
Posts: 4521
Location: Constant motion
Reply with quote
Post Re: Accessing variables in AI
Variables like this are private, and cannot be accessed by scripts attached to anything other than themselves. This means that you'll have to do a MOID search to find it again.


Mon Nov 14, 2011 10:20 pm
Profile
DRL Developer
DRL Developer

Joined: Tue Aug 11, 2009 5:09 am
Posts: 395
Reply with quote
Post Re: Accessing variables in AI
I'm sure someone will be able to help you if you post the whole script or even the whole mod, with an explanation of what it is you are trying to do.


Tue Nov 15, 2011 9:45 am
Profile

Joined: Sun Oct 23, 2011 7:57 am
Posts: 23
Reply with quote
Post Re: Accessing variables in AI
I'm attempting to rewrite the default dropship ai in order to make it crash less. The other idea was to provide more early outs and reduce nesting. The final idea was to decrease the number of check per cycle done, which if the Ai is making better decisions,is easily possible. If i remember correctly a flaw in the original design is it doesn't consider the size of the object it is avoiding. This results in dropships often clipping the thrusters of other dropships, which one might argue is their weakest part. I figured I might as well fix the dropship dock as well but if I can't access variables that makes it a bit annoying as I was trying to set the ship to docking mode. I would rather not check every cycle, or even every nth cycle on the dropship to see if it is within range of a dock. I was hoping to keep that in the dropship dock code and then have, if self.DockingMode = "Docked" then return end, inside the UpdateAI loop of the dropship.


Tue Nov 15, 2011 6:38 pm
Profile
DRL Developer
DRL Developer

Joined: Tue Aug 11, 2009 5:09 am
Posts: 395
Reply with quote
Post Re: Accessing variables in AI
Communication between objects mostly rely on ugly hacks at the moment. You could for example use an unused property like sharpness or a global variable to communicate what state the dropship is in.


Wed Nov 16, 2011 10:37 am
Profile

Joined: Sun Oct 23, 2011 7:57 am
Posts: 23
Reply with quote
Post Re: Accessing variables in AI
Could I store it in AIMODE, as self.Ship.AIMODE ="Docking" ? I would have to adjust my code for dealing with the new AIMODE, and setting it back to a valid one once the ship undocks. The dropship would have a if self.AIMODE = "Docking" then return end in the updateAI loop, so no other code would try to access the "invalid" AIMODE, correct?


Wed Nov 16, 2011 7:40 pm
Profile
DRL Developer
DRL Developer

Joined: Tue Aug 11, 2009 5:09 am
Posts: 395
Reply with quote
Post Re: Accessing variables in AI
Yes, that is a much better idea than using sharpness. AIMode is an integer, so you would have to pick a number outside of the AIMode enumeration.


Thu Nov 17, 2011 8:23 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 7 posts ] 

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

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.
[ Time : 0.033s | 13 Queries | GZIP : Off ]