[Request] System Addition

Immolation

Member
Reaction score
20
Hello, can I haz a Master_GetSummons function with this system? Pwetty pwease! :eek:

JASS:
library IndieSummon uses AIDS, KT
    //**************************************************************************************************
    //* 
    //* Independant Summons
    //* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    //* This is a crappy AIDS/KT2 port of IndieSummon written by Jesus4Lyf. It is based strongly on
    //* the previous system code. It is designed to work without leaking. There is one flaw which exists
    //* also in the original - you should not stop the AI and then immediately start it again. Instead,
    //* just call start without stopping it first. <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite1" alt=":)" title="Smile    :)" loading="lazy" data-shortname=":)" />
    //*
    //**************************************************************************************************


    //==================================================================================================
    // Independant Summons Configuration:
    //
    globals
        private constant real MAXDELAY=0.25 //* The max delay betwen orders issued to the summon
        private constant real MINDELAY=0.25 //* The min delay betwen orders issued to the summon
        private constant real MAXDISTANCE=1000.0 //* If the distance betwen the summon and the master is greater than this value,
                                                 //  The summon will move to the position of the master instead of attack move
        private constant real COMETOMAXDIST=100.0 //* Max distance for issued orders to approach the master
        private constant real COMETOMINDIST=100.0 //* Min distance for issued orders to approach the master
    endglobals
    
    //==================================================================================================
    function IndieSummon_Order takes unit summon, unit master returns nothing
     local integer o=GetUnitCurrentOrder(summon)
     local real tx=GetUnitX(master)
     local real ty=GetUnitY(master)
     local real angle
     local real dist

        set dist=Pow(tx-GetUnitX(summon),2) + Pow(ty-GetUnitY(summon),2)
        if (dist &gt; (MAXDISTANCE*MAXDISTANCE) )  and (o == 0 or o == OrderId(&quot;attack&quot;) or o == OrderId(&quot;move&quot;) or o == OrderId(&quot;stop&quot;) or o==851971) then
            call IssuePointOrder(summon, &quot;move&quot;, tx,ty) 
        elseif dist &gt;= (COMETOMINDIST*COMETOMINDIST) and (o == 0 or o == 851971) then
            set angle = GetRandomReal( GetUnitFacing(master)-80, GetUnitFacing(master)+80)
            if (ModuloInteger(GetUnitPointValue(summon),2)==0) then
                set angle=angle * bj_DEGTORAD
            else
                set angle=- angle * bj_DEGTORAD
            endif

            set dist = GetRandomReal(COMETOMINDIST, COMETOMAXDIST)
            set tx=tx+dist*Cos(angle)
            set ty=ty+dist*Sin(angle)
            if not IssuePointOrder(summon, &quot;attack&quot;, tx, ty ) then
                call IssuePointOrder(summon, &quot;move&quot;, tx, ty )
            endif
        endif
    endfunction
    
    private struct Summon extends array
        unit master
        private method AIDS_onDestroy takes nothing returns nothing
            set this.master=null
        endmethod
        //! runtextmacro AIDS()
    endstruct
    globals
        private unit Unit=null // must be set to null.
    endglobals

    private function IndieSummon_AntiSmart_Timer takes nothing returns boolean
     local Summon s=Summon(KT_GetData())
        if (GetUnitCurrentOrder(s.unit)==851971) then
            call IndieSummon_Order( s.unit, s.master )
            call KT_Add(function IndieSummon_AntiSmart_Timer,s,0.1)
        endif
     return true
    endfunction


    private function IndieSummon_AntiSmart takes nothing returns nothing
        if (GetIssuedOrderId() == 851971) then
            call KT_Add(function IndieSummon_AntiSmart_Timer, Summon[GetTriggerUnit()], 0.0)
        endif
    endfunction

    function IndieSummon_loop takes nothing returns nothing
    // Executed in another thread
     local unit summon=Unit
     local Summon k=Summon[summon]
     local unit master
     local trigger smart=CreateTrigger()
     //local integer n=0
     local triggeraction ac=TriggerAddAction( smart, function IndieSummon_AntiSmart)

        call TriggerRegisterUnitEvent( smart, summon, EVENT_UNIT_ISSUED_TARGET_ORDER )
        call TriggerRegisterUnitEvent( smart, summon, EVENT_UNIT_ISSUED_POINT_ORDER )
        loop
            exitwhen (GetWidgetLife(summon)&lt;=0)
            set master=k.master
            exitwhen master==null
            call IndieSummon_Order( summon, master)
            call TriggerSleepAction( GetRandomReal( MINDELAY, MAXDELAY )) // Changed from PolledWait.
        endloop
        set k.master=null
        call TriggerRemoveAction(smart,ac)
        call DestroyTrigger(smart)

     set ac=null
     set summon=null
     set master=null
     set smart=null
    endfunction
    
    function IndieSummon_SetMaster takes unit summon, unit master returns nothing
     local unit a=Unit
     local Summon k=Summon[summon]

        if k.master!=null then
            set k.master=master
        else
            set k.master=master
            set Unit=summon
            call ExecuteFunc(&quot;IndieSummon_loop&quot;)
            set Unit=a
        endif

     set a=null
    endfunction

    function IndieSummon_GetMaster takes unit summon returns unit
        return Summon[summon].master
    endfunction

    function IndieSummon_StopAI takes unit summon returns nothing
        set Summon[summon].master=null
    endfunction
endlibrary


Notes:
If in any way you feel this system totally wrong, you are completly allowed to make it the next ub3rl33t system in the JASS world(I accept everything except cJass)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top