Stoping building traing unit

Discussion in 'World Editor Help' started by Sgqvur, Mar 28, 2011.

  1. Sgqvur

    Sgqvur FullOfUltimateTruthsAndEt ernalPrinciples, i.e shi

    Ratings:
    +62 / 0 / -0
    Is there a trigger that stops a building to train a unit? For example when you order a Barracks to train a footman I want to order the Barracks to stop training it.
     
  2. 3ICE

    3ICE Cool Member

    Ratings:
    +3 / 0 / -0
    • Like Like x 1
  3. Sgqvur

    Sgqvur FullOfUltimateTruthsAndEt ernalPrinciples, i.e shi

    Ratings:
    +62 / 0 / -0
    Well it works =). tnx

    How did you know which order id does that? (experimenting?)

    Is there some documentation about orders somewhere?
     
  4. 3ICE

    3ICE Cool Member

    Ratings:
    +3 / 0 / -0
    To find out the Order ID of an ability (yes, cancel is an ability), you can make a simple trigger:

    JASS:
    //JASS is so much nicer:
    function Grab_OrderID takes nothing returns nothing
      call DisplayTextToPlayer(GetLocalPlayer(),0,0,I2S((GetIssuedOrderId())))
    endfunction
    
    function InitTrig_Grab_OrderID takes nothing returns nothing
      set gg_trg_Grab_OrderID=CreateTrigger()
      call TriggerRegisterUnitEvent(gg_trg_Grab_OrderID,u,EVENT_UNIT_ISSUED_ORDER)
    // u is gg_unit_hbar_0000 which is the barracks
      call TriggerAddAction(gg_trg_Grab_OrderID,function Grab_OrderID)
    endfunction

    The function returns this number when you cancel a training unit: 851976
    (I tested with a barracks cancelling some footmen.)

    We translate that number to hexadecimal using google:
    http://www.google.com/search?q=851976+in+hexadecimal
    (or a calculator) and we get: 851976 = 0xD0008

    And finally, I don't know if not padding that with zeros to 8 digits or keeping it in uppercase causes any trouble so I did those two steps anyway, just to be safe: 0x000d0008

    Actually, now that I think of it... All that messing around with hexadecimals is not even needed! We can just use the decimal number directly:
    JASS:
    call IssueImmediateOrderById(Building,851976)
    I tested it.

    And I made this demo map for you:
     

    Attached Files:

    • Like Like x 1
  5. Sgqvur

    Sgqvur FullOfUltimateTruthsAndEt ernalPrinciples, i.e shi

    Ratings:
    +62 / 0 / -0
    tnx u a lot =).

    I think IssueImmediateOrderById(Building,851976) shoud really be used as building_cancel_production/research(unit building). Those magic numbers tell you nothing.

    >And finally, I don't know if not padding that with zeros to 8 digits or keeping it in uppercase causes any trouble so I did those two steps anyway, just to be safe: 0x000d0008

    I think hex numbers are fine no matter how you write them(with 0x and less then 7FFFFFFF). But if you use ascii ('Aatk') you should use either four digits or just 1. (Tested it a long time ago)

    For example a shortcut for a dialog button might be written using ascii
    dialog_add_button(d, "text", action_function, 'X') // 'X' is the hotkey
    but if instead of 'X' you write '0X' or '00X' the game won't start (writing it '000X' makes no sense though =))

    Anyway even if you specify orders in ascii they are still quite cryptic so I guess constants should be used.
     

Share This Page