Snippet AutocastOrderEvent

Azlier

Old World Ghost
This detects when you turn on or off autocast. You know, by right clicking the ability icon. Yep.

Two functions available to you:
JASS:
TriggerRegisterAutocastOnEvent takes trigger whichTrigger returns nothing
//Readies a trigger to fire when autocast is turned on.

TriggerRegisterAutocastOffEvent takes trigger whichTrigger returns nothing
//Same as above, but for when autocast is turned off.


Requires Event (but of course).

There are no configurables.
JASS:
library AutocastOrderEvent requires Event

globals
    private constant integer OFFSET = 0xD0000
    private integer array Data
    private Event On
    private Event Off
    private integer i
endglobals

function TriggerRegisterAutocastOnEvent takes trigger whichTrigger returns nothing
    call On.register(whichTrigger)
endfunction

function TriggerRegisterAutocastOffEvent takes trigger whichTrigger returns nothing
    call Off.register(whichTrigger)
endfunction

private function Fire takes nothing returns boolean
    set i = Data[GetIssuedOrderId() - OFFSET]
    if i == 1 then
        call On.fire()
    elseif i == 2 then
        call Off.fire()
    endif
    return false
endfunction

private function RegisterOrder takes integer i returns nothing
    set Data<i> = 1
    set Data[i + 1] = 2
endfunction

private struct Hack extends array

    static method onInit takes nothing returns nothing
        local trigger t = CreateTrigger()
        local integer i = 15
        loop
            call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_ORDER, null)
            exitwhen i == 0
            set i = i - 1
        endloop
        call TriggerAddCondition(t, Condition(function Fire))
    
        set On = Event.create()
        set Off = Event.create()
    
        //Register all autocast orders. Oh God.
        call RegisterOrder(0x060) //Heal
        call RegisterOrder(0x063) //Inner Fire
        call RegisterOrder(0x06C) //Slow
        call RegisterOrder(0x204) //Spell Steal
        call RegisterOrder(0x086) //Bloodlust
        call RegisterOrder(0x0F4) //Web
        call RegisterOrder(0x0DF) //Curse
        call RegisterOrder(0x0E6) //Raise Dead
        call RegisterOrder(0x242) //Essence of Blight
        call RegisterOrder(0x245) //Spirit Touch
        call RegisterOrder(0x1EA) //Frost Armor
        call RegisterOrder(0x0B6) //Faerie Fire
        call RegisterOrder(0x0A5) //Abolish Magic
        call RegisterOrder(0x0CE) //Searing Arrows
        call RegisterOrder(0x114) //Cold Arrows
        call RegisterOrder(0x27A) //Parasite
        call RegisterOrder(0x039) //Repair
        call RegisterOrder(0x0EB) //Restore
        call RegisterOrder(0x0C2) //Renew
        call RegisterOrder(0x0BE) //Recharge
        call RegisterOrder(0x248) //Carrion Beetles
        call RegisterOrder(0x262) //Black Arrow
        call RegisterOrder(0x23C) //Orb of Annihilation
        call RegisterOrder(0x053) //Get Corpse
        call RegisterOrder(0x049) //Kaboom!
        call RegisterOrder(0x11F) //Poison Arrows
        call RegisterOrder(0x2BF) //Incinerate Arrows...?
    endmethod
    
endstruct

endlibrary</i>


How to quickly fix an unresponsive autocast order:
1. Import the PrintOrders library into your map, and start then map.
2. Right-click the ability with the unresponsive Autocast order.
3. Some information should be printed on screen when you right-clicked the ability.
4. There should be a hexadecimal number that starts with 0xD0. Copy that number.
5. Paste the name of the unresponsive autocast order in this thread, and paste the number with it.
 

Romek

Super Moderator
Staff member
Useful. :D

Maybe you could add a Register function which also takes the ID?
 

Azlier

Old World Ghost
That would pretty much defeat the purpose of it being generic and accepting any autocast order. If you need something specific, it's a very simple matter to craft the trigger yourself. With a single if block checking the order ID.
 

Kenny

Back for now.
I was just in the process of making one of these, seems you beat me too it. Nicely done. Seems pretty handy. :thup:
 

Romek

Super Moderator
Staff member
> That would pretty much defeat the purpose of it being generic and accepting any autocast order.
Let me rephrase. In addition to the generic ones, adding a specific one would make things easier for the user.

> it's a very simple matter to craft the trigger yourself. With a single if block checking the order ID.
It's an even simpler matter to just register it specifically.

Well, it's your choice. I can't really force you to add a function like that. I'm just stating why it would be useful.
 

Azlier

Old World Ghost
I could do it if I create more triggers. However, I would need to spam Events if one needed to register more than one trigger to a single ID. Let me see what I can do.

EDIT: Hmm. This will be harder than I thought. The user could pull it off with a single if block using GetAutocastOrder, but I would need to attach to order ID's. Which means I need to wait for hashtables to become official :banghead:.
 

Romek

Super Moderator
Staff member
> However, I would need to spam Events if one needed to register more than one trigger to a single ID. Let me see what I can do.
Then that person could just use the generic one.
Chances are, people using this even would need it for one specific ID.
 

Azlier

Old World Ghost
If I were to implement specific orders like that, I would need to attach to order ID's. Any ideas on how to do that?
 

Romek

Super Moderator
Staff member
Hashtables?
You could probably just do a wrapper function you know. :p
 

Azlier

Old World Ghost
Yeah, and it would need to take a trigger. Then, I need to fire that trigger when the taken order is issued. Making me need to attach to that order. Looks like a bit much to lift a single if off of the user, and lose quite a bit of efficiency :nuts:.

>Hashtables?
Sure, once the patch becomes officially released and done.
 

Azlier

Old World Ghost
What actions and conditions? What are you talking about? This behaves exactly like a normal WC3 event, on the outside. Even the event response returns 0 when used somewhere incorrectly.
 

Azlier

Old World Ghost
You are free to make a wrapper for that, if you want. It's not my job to account for user laziness :p.

JASS:
function AutocastOrderOn takes code act, code cond returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterAutocastOnEvent(t)
    if act != null then
        call TriggerAddAction(t, act)
    endif
    if cond != null then
        call TriggerAddCondition(t, Condition(cond))
    endif
endfunction


EDIT: Ouch, just noticed something. A few abilities (very few) use un(abilityname) and (abilityname) for turning autocast on and off. Unfortunately, there is no sane way to detect those. Must update first post.
 

Azlier

Old World Ghost
Order ID's are either 0, or some very high number (past 50,000 if I remember). I'll go ahead and try some modulo. But I don't want to spam Events, sorreh.
 

Renendaru

(Evol)ution is nothing without love.
I was like, "Ooo, yay", but when I saw spells like searing arrows and other attack modify autocasts don't work I was annoyed. I needed the exact thing for it.
 

Romek

Super Moderator
Staff member
Approved.
This is useful. :)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    The old shoutbox wasn't supported anymore. We updated xenForo, so it had to be replaced.
  • jonas jonas:
    let's see if everyone finds it... the nice thing about the shoutbox was I could check on it even while logged out, but the existence of this one is hidden when you're not logged in
  • Ghan Ghan:
    We can fix that.
  • Ghan Ghan:
    Chat should show on the sidebar when not logged in now.
  • Ghan Ghan:
    (You'll still need to log in to post messages)
  • Ghan Ghan:
    Test!
  • tom_mai78101 tom_mai78101:
    I must be in a test server.
  • tom_mai78101 tom_mai78101:
    Nice, Twitter tweets embedding now works
  • Wizard Wizard:
    Yup.
  • Ghan Ghan:
    Excellent.
  • Ghan Ghan:
    @tom_mai78101 Hello there.
  • Ghan Ghan:
    Tagging works in the chat too.
  • tom_mai78101 tom_mai78101:
    @Ghan Missed it.
  • Wizard Wizard:
    Still fixing things here and there. Added widgets to the portal, will make it match the ones here on the forum index tomorrow.
  • Ghan Ghan:
    The venerable World Editor Tutorials site has been converted to HTTPS at last.
  • jonas jonas:
    cool
  • jonas jonas:
    and I can even edit my messages, nice
  • seph ir oth seph ir oth:
    GENERAL CHIT CHAT, YOU ARE A BOLD ONE
  • Ghan Ghan:
    Hello there
  • The Helper The Helper:
    this new chatbox is great and the forum software update is great too
    +1
  • The Helper The Helper:
    upgrade has fixed forum registration spam problem
  • tom_mai78101 tom_mai78101:
    Something tells me we might be able to customize the chatbox a bit, considering that there's a gap under every message.
  • Wizard Wizard:
    Going to deploy a fix soon, just had to take some time for myself this weekend.
  • Varine Varine:
    Unbelievable. Time for yourself? How dare you!

    Members online

    No members online now.

    Affiliates

    Hive Workshop
    Top