View topic - Question about the airplane plant



All times are UTC + 1 hour


Post new topic Reply to topic  [ 15 posts ] 
Author Message
PostPosted: 19 Jan 2010, 18:32 

Joined: 21 Aug 2009, 11:47
Can someone tell me how the airplane plant in CA works? How does the plane get to know where to fly when the "Land at XX" limit is reached.
What I want to do is to make such a thing for landunits. So when a vehicle reached the "Return at XX" (like "Land at XX" for the airplanes) it will return to the repairpad of the nearest vehiclefactory (factory with a builtin repairpad).


Top
 Offline Profile  
 
PostPosted: 19 Jan 2010, 19:47 
Server Owner & Developer
User avatar

Joined: 19 May 2006, 18:13
Location: Brno, Czech rep., EU, Terra, Sol, Orion arm, Milky way, Virgo supercluster
It uses engine feature (with lots of side issues). I dont think it will work for land units. You have to code your own lua. When you have it done, let us know, it could be handy!


Top
 Offline Profile  
 
PostPosted: 19 Jan 2010, 19:59 

Joined: 17 Sep 2008, 03:36
Location: your imagination
Check out the retreat widget included in CA:

http://trac.caspring.org/wiki/Retreat


Top
 Online Profile  
 
PostPosted: 19 Jan 2010, 22:12 
User avatar

Joined: 23 Oct 2004, 00:43
I'm pretty sure Retreat is enabled by default (although that may have been changed because of anti-widget whiners). It's a very user-friendly and powerful widget, and is particularly useful for high-armor raiders like Zippers and Kodachis.


Top
 Offline Profile  
 
PostPosted: 20 Jan 2010, 08:15 
Zero-K Developer

Joined: 28 Nov 2006, 13:22
Retreat is virtually useless, its only good on air units. Land units just mill into eachother and die and cause traffic jams.


Top
 Offline Profile  
 
PostPosted: 20 Jan 2010, 17:44 
Cursed Zero-K Developer
User avatar

Joined: 07 Nov 2007, 21:48
Location: Horse
Saktoth wrote:
Retreat is virtually useless, its only good on air units. Land units just mill into eachother and die and cause traffic jams.


Have you tried it with...

Pxtl wrote:
Zippers

Saktoth? It's easy and fun, don't forget to sprint. I think you aren't a fan of the zipper anyway.


Top
 Offline Profile  
 
PostPosted: 21 Jan 2010, 09:00 

Joined: 21 Aug 2009, 11:47
Can I get the position of a specific part of a building. Like I build a factory with a part called repairpad, how can I get the position of this part so I can send units there?


Top
 Offline Profile  
 
PostPosted: 21 Jan 2010, 18:55 
Server Owner & Developer
User avatar

Joined: 19 May 2006, 18:13
Location: Brno, Czech rep., EU, Terra, Sol, Orion arm, Milky way, Virgo supercluster
Look in lua wiki, you can get matrix of the piece for sure.


Top
 Offline Profile  
 
PostPosted: 13 Feb 2010, 19:36 

Joined: 21 Aug 2009, 11:47
OK, found some time to give it a try. But I guess I do it the wrong way.
I added a button so when this button is pressed the unit should be sent to a certain place (should be the repairpad (later)) but when the unit arrives Spring prints an error.

Code:
function gadget:GetInfo()

   return {
      name = "tobase",
      desc = "tells a unit to move to a certain point",
      author = "thedude",
      date = "yesterday",
      license = "Public Domain",
      layer = 1,
      enabled = true

   }

end

local CMD_TOBASE = 30059

if (gadgetHandler:IsSyncedCode()) then


--SYNCED


local cmdTobase={

   id=CMD_TOBASE,
   type=CMDTYPE.ICON,
   name="movetopoint",
   cursor="moveto",
   action="moveto",
   tooltip="move to 200 200",

}

function gadget:UnitCreated(u,ud,team)

   if UnitDefs[ud].name=="tank" then
      Spring.InsertUnitCmdDesc(u,CMD_TOBASE,cmdTobase)

   end

end


function gadget:UnitDestroyed(u,ud,team)

end


function gadget:CommandFallback(u,ud,team,cmd,param,opt)

   if cmd == CMD_TOBASE then
      --Spring.GiveOrderToUnit(u,CMD.MOVE,{200,0,200},0)
      Spring.GiveOrderToUnit(u, CMD.INSERT, { 0, CMD.MOVE, CMD.OPT_INTERNAL, 200, 0, 200}, CMD.OPT_ALT) -- ALT makes the 0 positional

   end

   return false

end


function gadget:Initialize()
Spring.SetCustomCommandDrawData(CMD_TOBASE,"Moveto",{1,1,.2,1})

end

else

--UNSYNCED

end



the error: "LuaRules::RunCallIn: error = 2, CommandFallback, [string "LuaRules/Gadgets/tobase_3.lua"]:51: GiveOrderToUnit() recursion is not permitted"

I guess Spring tells me that it is not allowed to use an existing command with my new command :?
When I use "Spring.GiveOrderToUnit(u,CMD.MOVE,{200,0,200},0)" I get no error but the unit just moves a little and than moves back.


Top
 Offline Profile  
 
PostPosted: 13 Feb 2010, 23:33 
Moderator

Joined: 19 May 2009, 20:10
thedude wrote:
the error: "LuaRules::RunCallIn: error = 2, CommandFallback, [string "LuaRules/Gadgets/tobase_3.lua"]:51: GiveOrderToUnit() recursion is not permitted"

I guess Spring tells me that it is not allowed to use an existing command with my new command :?

Spring tells you that recursion is not permitted. You can't give commands within CommandFallback.

(Even if: CommandFallback is called 2 times a second and you add a command each time.)


Top
 Offline Profile  
 
PostPosted: 16 Feb 2010, 14:58 

Joined: 21 Aug 2009, 11:47
What would be a better way to do that?


Top
 Offline Profile  
 
PostPosted: 20 Feb 2010, 19:55 

Joined: 21 Aug 2009, 11:47
What about this version?
What I was thinking it does:
I start the game.
build the unit wich should have this command
select that unit
press the moveto button
gadget:AllowCommand is triggert
cheks if my command is triggert
yes-> execute the goto function
==>unit moves to {200,200}

Code:
function gadget:GetInfo()

   return {
      name = "tobase",
      desc = "tells a unit to move to a certain point",
      author = "thedude",
      date = "yesterday",
      license = "Public Domain",
      layer = 1,
      enabled = true
   }

end

local CMD_TOBASE = 30059

if (gadgetHandler:IsSyncedCode()) then

--SYNCED

local cmdTobase={

   id=CMD_TOBASE,
   type=CMDTYPE.ICON,
   name="movetopoint",
   cursor="moveto",
   action="moveto",
   tooltip="move to 200 200",

}


local function goto(unitID)
   Spring.GiveOrderToUnit(unitID,CMD.MOVE,{200,0,200},0)

end

function gadget:UnitCreated(u,ud,team)

   if UnitDefs[ud].name=="tank" then
      Spring.InsertUnitCmdDesc(u,CMD_TOBASE,cmdTobase)
   end
end

function gadget:UnitDestroyed(u,ud,team)

end

function gadget:AllowCommand(u, ud, team, cmd, param, opt)

   if cmd == CMD_TOBASE then
      Spring.Echo("here comes my command");
      goto(u)
   return true
   end

   return true

end

function gadget:Initialize()

Spring.SetCustomCommandDrawData(CMD_TOBASE,"Moveto",{1,1,.2,1})

end

else

--UNSYNCED

end



The problem is when I push the button the unit starts to move but then turns and moves back to the place where it was before. :|

Quote:
(Even if: CommandFallback is called 2 times a second and you add a command each time.)

Ooops didn't know that.


Top
 Offline Profile  
 
PostPosted: 20 Feb 2010, 21:01 
Moderator

Joined: 19 May 2009, 20:10
thedude wrote:
press the moveto button
gadget:AllowCommand is triggert
cheks if my command is triggert
yes-> execute the goto function

Recursion again. You cannot call GiveOrder within AllowCommand.
Save the information (into a variable etc.) that you want to give an order and give the order the next GameFrame().


Top
 Offline Profile  
 
PostPosted: 23 Feb 2010, 09:15 

Joined: 21 Aug 2009, 11:47
This one works for me. But I don't know if that is a good way to do that. What happens if I select 100 units and save each unitID into one array (buttonof[100]) and after that I select only one unit and save the unitID to the first element of my array are the other IDs still there? Should I better make a for loop and delete the whole array and then save the new ID/IDs ?

Code:
function gadget:GetInfo()
   return {
      name = "tobase",
      desc = "tells a unit to move to a certain point",
      author = "thedude",
      date = "yesterday",
      license = "Public Domain",
      layer = 1,
      enabled = true
   }
end

local CMD_TOBASE = 30059
local yeswecan=false
local newclick=false
local a=0
local buttonof={}

if (gadgetHandler:IsSyncedCode()) then

--SYNCED

local cmdTobase={
   id=CMD_TOBASE,
   type=CMDTYPE.ICON,
   name="movetopoint",
   cursor="moveto",
   action="moveto",
   tooltip="move to 200 200",
   }


local function goto(unitID)
   
   yeswecan=true

   if newclick==true then

      a=1
      buttonof[a]= unitID
   end
   if newclick==false then
      a=a+1
      buttonof[a]= unitID
   end
   newclick=false
end


function gadget:UnitCreated(u,ud,team)
   
   if UnitDefs[ud].name=="tank" then

      Spring.InsertUnitCmdDesc(u,CMD_TOBASE,cmdTobase)

   end

end

function gadget:UnitDestroyed(u,ud,team)

end

function gadget:AllowCommand(u, ud, team, cmd, param, opt)
   if cmd == CMD_TOBASE then
   
      Spring.Echo("here comes my command");
      goto(u)
      
   return true
   end
   return true
end

function gadget:GameFrame(f)

    if f %32<1 then
      if yeswecan==true then
         for i=1,#buttonof do
         Spring.GiveOrderToUnit(buttonof[i],CMD.MOVE,{200,0,200},0)
         end
         yeswecan=false
         newclick=true
      end
   end
end


function gadget:Initialize()
    Spring.SetCustomCommandDrawData(CMD_TOBASE,"Moveto",{1,1,.2,1})

end


else
--UNSYNCED


end



Another question. I found in XOTA v1.61 the same command but only for planes/vtols. Problem is I don't get how this one works cause there is no move command to make the planes move to the airpad. The only thing I can find is "Spring.CallCOBScript(unitID, "Refuel", 0)". I thought this is a command to look for a tag/function in the bos file and to execute that but after descripting the bos file I could not find a function called "Refuel" :?:


Attachments:
File comment: This is the cob and the descripted bos file of the plane "Fighter".
cobandbosfile.7z [2.36 KiB]
Downloaded 13 times
File comment: This is the gadget which adds the command (I think).
unit_refuel.lua [4.61 KiB]
Downloaded 93 times
Top
 Offline Profile  
 
PostPosted: 16 May 2010, 18:38 

Joined: 21 Aug 2009, 11:47
I have a problem. If I use the CommandFallBack function my gadget doesn't work but when using AlowCommand it seems to work (little buggy but works). Can't find the problem :evil: . Please help.

http://sharetext.org/AKQ2


Top
 Offline Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 15 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 0 guests


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® Forum Software © phpBB Group

Site layout created by Roflcopter et al.