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.
  • Varine Varine:
    ^_^
  • Varine Varine:
    Good luck to the hurricane path people. Is TH still in Houston?
  • Ghan Ghan:
    I think so
    +1
  • The Helper The Helper:
    Yeah we got nothing here did not even rain
  • Ghan Ghan:
    We could use some rain.
  • The Helper The Helper:
    I am not complaining though Hurricanes are not fun I have been through alot of them
  • Blackveiled Blackveiled:
    I evacuated for it just incase since I live in La Porte pretty much right on the water (in Houston area). Didn't see anything. It's a good thing for me anyways.
  • Ghan Ghan:
    It's too bad that Blizzard messed up so terribly with Reforged.
  • Ghan Ghan:
    Still has a 0.6 user metacritic score.
  • Ghan Ghan:
    (Out of 10)
  • Varine Varine:
    I haven't even tried it yet because everyone said it sucked. How do you get .6 out of ten?
  • The Helper The Helper:
    I am waiting for Dwarf Fortress to come out on Steam then I am on it.
  • Accname Accname:
    I play Dwarf Fortress from time to time.
  • Accname Accname:
    Its Okay.
  • Accname Accname:
    But the performance is sub-par. Does not seem to be well optimized.
  • Varine Varine:
    Is the Steam version coming with a graphical overlay or is it using the ASCII graphics still?
  • tom_mai78101 tom_mai78101:
    Steam version has the graphical overlay.
  • The Helper The Helper:
    Steam Version has graphics, a new interface and will be integrated in the steam mod stuff
  • Blackveiled Blackveiled:
    I didn't think WC3 Reforged was that bad. It pretty much did what it stated (to me at least), but then again I can care less about reforged campaigns and all that. I just care about gameplay.
  • Varine Varine:
    I think people were hoping for a resurgence in mod support. I have little interest in the actual game tbh
  • Varine Varine:
    Plus I know they added that Dota precedent clause where Blizzard can steal your shit which isn't cool.
  • Ghan Ghan:
    They sold Reforged to the community as primarily a huge graphical uplift with high res textures and redone cinematics.
  • Ghan Ghan:
    They even showed one of the redone cinematics at Blizzcon and that very cinematic wasn't even in the released game.
  • Ghan Ghan:
    So I think folks were angry about that.

    Members online

    No members online now.

    Affiliates

    Hive Workshop
    Top