[Request] System Remake

Jesus4Lyf

Good Idea™
Reaction score
397
>But I know nothing of JASS at all
Alright, have a lame fix then.
JASS:
function InitTrig_IndieSummon takes nothing returns nothing
endfunction
//##Start##
//**************************************************************************************************
//*
//* IndieSummons (header functions)
//* ¯¯¯¯¯¯¯¯¯¯¯¯
//*     To implement these functions, you must select the contents of this trigger starting
//*   with the //##Start## and finishing with the  //##End##, and copy that TO YOUR MAP's
//*   CUSTOM SCRIPT SECTION, (it is at the top of the trigger list in the trigger editor)
//*
//*     DON'T JUST COPY THE TRIGGER; copy this to the custom script section
//*
//*   AFTER copying this function to custom script section, copy the next trigger to your map
//*
//**************************************************************************************************

//=================================================================================================
//
// <a href="http://www.wc3jass.com" target="_blank" class="link link--external" rel="nofollow ugc noopener">http://www.wc3jass.com</a> : The place with tons of JASS scripts
//
//=================================================================================================

function IndieSummon_SetMaster takes unit summon, unit master returns nothing
 local unit a=bj_ghoul[0]
 local string k=GetAttachmentTable(summon)

    if (HaveStoredInteger(CSCache(),&quot;[IndieSummons]&quot;,k)) then
        call SetTableObject(&quot;[IndieSummons]&quot;,k,master)
    else
        call SetTableObject(&quot;[IndieSummons]&quot;,k,master)
        set bj_ghoul[0]=summon
        call ExecuteFunc(&quot;IndieSummon_loop&quot;)
        set bj_ghoul[0]=a
    endif

 set a=null
endfunction

function IndieSummon_GetMasterSubcall takes unit summon returns unit
    call GetStoredInteger(CSCache(),&quot;[IndieSummons]&quot;,GetAttachmentTable(summon))
    if false then
		return null
	endif
endfunction
function GiveMyUnitBackGrr takes unit u returns unit
	return u
endfunction
function IndieSummon_GetMaster takes unit summon returns unit
    return GiveMyUnitBackGrr(IndieSummon_GetMaster(summon))
endfunction

function IndieSummon_StopAI takes unit summon returns nothing
    call FlushStoredInteger(CSCache(),&quot;[IndieSummons]&quot;,GetAttachmentTable(summon))
endfunction
//##End##

If that still does not work, please post the entire CSCache code.

If you want a real fix, wait for someone with time to respond, or learn JASS.
 

Hildagarn

Member
Reaction score
20
or learn JASS
want to do this! Trying

but as of now I guess I just have to wait, lame fix didn't work

the entire CSCache was entirely removed because it didn't work anymore
 

bOb666777

Stand against the ugly world domination face!
Reaction score
117
You could pretty much do this with GUI lol.
Just give all summons the Ward classification, add a trigger that prevents the order called "smart" for those units, give them Wander (optional, you can also periodically order them to attack ground a random point near owner), index all summons in a unit group array to a unit array and check periodically if theyre not too far from the owner and voila.
 

Hildagarn

Member
Reaction score
20
Why bump? Take your pick. :p

don't know Jass

You could pretty much do this with GUI lol.
Just give all summons the Ward classification, add a trigger that prevents the order called "smart" for those units, give them Wander (optional, you can also periodically order them to attack ground a random point near owner), index all summons in a unit group array to a unit array and check periodically if theyre not too far from the owner and voila.
could you do this for me?
 

Jesus4Lyf

Good Idea™
Reaction score
397
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=2.5 //* The max delay betwen orders issued to the summon
        private constant real MINDELAY=1.00 //* 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=500.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

Here's yer dream. Ported it.
Uses AIDS/KT2.
Better than the original... and will work on 1.23, 1.23b, 1.24, everything...
Completely untested, if there are syntax errors you must be clear as to what they are, no "doesn't work" post, you need to say "doesn't work, gives this error or this happens and shouldn't but it compiles ok".
Cheers. :)
 

Hildagarn

Member
Reaction score
20
JASS:
static if AIDS___USE_PERIODIC_RECYCLER then

syntax error

on AIDS :-/

sigh, gotta update JASS helper
 

Hildagarn

Member
Reaction score
20
K it says there are 4 errors

JASS:
local integer s=(KT_GetData())

Undeclared function KT_GetData
JASS:
     local integer s=(KT_GetData())

cannot convert null to integer
JASS:
            call KT_Add(function IndieSummon___IndieSummon_AntiSmart_Timer , s , 0.1)

undelcared function KT_Add
JASS:
            call KT_Add(function IndieSummon___IndieSummon_AntiSmart_Timer , s__IndieSummon___Summon__staticgetindex(GetTriggerUnit()) , 0.0)

undelcared function KT_Add


i did put KT in though
 

Hildagarn

Member
Reaction score
20
Wait, do i still need to use this?
Trigger:
  • Make summoned units independant
    • Events
      • Unit - A unit Spawns a summoned unit
    • Conditions
    • Actions
      • Custom script: call IndieSummon_SetMaster( GetSummonedUnit(), GetSummoningUnit())
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top