System SpellStruct

But all of your resources look pretty ;p, even the ones with fugly textmacros all over the place
Lol. XD

I understand what you're saying. There is no extra evaluation on events, though. There is an extra execute on triggers from .createTrigger, and timers from startTimer. Considering that T32 works flawlessly with this, the timer thing doesn't matter as it is only for high periods. So actually, none of it is even an issue. This thing flies.

... Except for group usage. That's a little nasty. Nothing stops you from doing it yourself, though.

Thanks for all the feedback. Still hoping to get this approved...
 
did anyone else mention yet that this test map is rather odd? everything seems ordinary to me...where's the spellstruct system? ok looking at the trigger it seems that death coil and life drain are the custom spells...

ok maybe you should pick a different ability other than the death coil...considering you can cast it on your dark ranger and get her blown up. and it's not obvious to a tester what spells to test...why no instructions for the tester?

anyway, wow idk if it was because of me or not...but when i played with the aoe and put it up to 1000 instead of 500 and tried life draining a footman the drain broke really fast and then later on the footman seemed to chase the dark ranger into the out of bounds area or something...idk cuz i was busy selecting my death knight to coil the ranger to see what would happen now that i changed the value of the wait from 2 seconds to 10...anyway...war3 seems to have frozen and i am pretty sure ranger left the map area but war3 doesn't know what to do. does this test map need boundsentinel?
NO.

It bugged for me .__.
Unless it's my own fault again :'(
Attached map. Why does SpellStruct fire for the Blink spell?

Also, 3:04 AM. Wow.

what was he talking about? i didn't see a blink spell...all i see is time bomb and life drain...was he talking about the life drain?

edit: hmmm i tested it a second time and this timethe footman rather than the ranger seemed to disappear from the map completely...but the game didn't freeze up or crash.

also, Jesus4Lyf, when i tried putting your Berserker thing in there it's not compiling for me, i'm not sure why but i get an error at the following line:
call this.destroy() // actually has garbage collection

all i did was put it in a trigger with the name as like berserkerwhateverthenamewas and then changed the xxxx ability id to Absk...am i missing something?

edit: apparently i'm either looking at an out of date test map, or the test map hasn't been updated.
edit2: ok i've tested it again with all the spoiler code informations on your first post and i'm still coming up with the same problem for the berserker spell thing. maybe you already are aware of this error, i don't know. at any rate...i don't seem to be getting the same problems i was getting before with the dark ranger spell. although i wonder at how customizable it is considering it doesn't really do what you'd expect it to. but at least it isn't bugging out in the extreme...i'm guessing i'm just too stupid to know how to customize the spell properly...
edit3:ah there we go...rather than editing the value 500...i changed the duration...yeah that makes sense...anyways...now that we have that in order it does seem like your test map needs boundsentinel...the dark ranger can end up outside of the map bounds...
ok i imported the boundsentinel trigger and well, although it did prevent her from going out of bounds it did come with some side effects...after the spell was over, she jumped to the location i asked her to move to instead of moving, then she wiggly walked around everywhere for a while then she started not really going where i was telling her to go...then started to obey me again...all the while oftentimes wiggly walking and then anyway when i tried to cast the spell again the map froze again like it had back when i had the trouble with the old test map when i edited the 500 value to be 1000 in the trigger.
just for further clarification:
when i said i edited the duration of the spell, it means the life drain object itself. just in case you were wondering where i found the duration to be edited...anyway yeah for better testing purposes with the bounds i'd recommend taking it off 8 seconds and bringing it up to a higher number. i used 30.

well now after looking at all that i'm unsure that boundsentinel would be at fault, although it's a slight possibility...at any rate since the lifesteal spell isn't working with or without it then there should at least be an alternative.

that's what i have to say about the system...on a more personal note...i have some issues with your test map.

i was going to pm it to you but you say you dislike them oftentimes because then others won't be able to learn from them...so...since this is basically advice i'm giving you that others can possibly learn from i guess i'll give it to you also...maybe it's nothing you don't already know, but whatever. here it is, just in case.

well i'll probably examine the system later on(not that i'd understand much, but who knows)...but even just testing it i've noticed a lot of problems with it. i just posted a lengthy reply in your thread there about it and to be honest i hadn't given the system much thought previously most likely because of the junk test map that it has...no offense intended but the lack of instructions for the tester is sortof lame and not very encouraging. at least fix that if nothing else.

for one thing, it's not exactly intuitive for one thing to use death coil or life drain just because those 2 heroes only have one skill point whereas the potm has 5 simply because they each have 4 other skills to choose from...and further although having extra units around to toy with is fine...i think MOST testers would be frustrated at seeing all the enemy footmen die over and over again before figuring out what were the special spells. obviously they could look at the triggers and figure it out...but if you had only posted a simple to player red message to use the death coil and life drain spells then they wouldn't be wondering what's up with your system...like i had said...

it looked like there was no system whatsoever while trying to test this until i actually went into the trigger editor and read the triggers.

a VERY simple fix that would not include giving instructions...but of course would be really lazy and i wouldn't recommend it...but here it is...would've been to just at least throw in a bunch more footmen so that they don't all die while the tester is trying to figure out what spells do something special...

and of course like i said i'm unsure if i was merely playing an older version of your test map or if your test map hasn't been updated...but anyway that wouldn't change the fact that when i did happen to download it, these things had been the case...

anyways... aside from all that...i might as well mention that i like the idea of both of the spells.

obviously life drain has kinks to work out, but it's a very interesting concept to have a spell like that moving both the triggering unit and the target unit of a spell...it seems novel to me, at least. nice idea.

also the death knight thing...hmm...yeah it's cool, sure. didn't they have something like this in the fight with gotenks and buu in the hyperbolic time chamber? anything similiar to anything in that fight is really cool and i'd love to see stuff like that in warcraft 3 anytime.

edit4: it just occured to me that i should do a little bit more testing...and...yeah...my hunch was right...if you use alternate level ground and a cliff and the ranger's back is to the cliff she's going to go up it and we get some more bugs. i didn't wait for the duration to run out during the 30 secs but during it she went up the cliff...the footman did not follow her...and then she went back and forth and they looked like a couple of units going at a tree with a saw....it was actually quite amusing, compared to the other bugs i ran into earlier. at any rate i interrupted the channeling to get her to move around to see what happens next and she was on the high ground and she was able to start to go down the cliff...i don't clearly remember what happened next but i think i tried to make her go back up the cliff again and then she got stuck. if i remember right the game didn't freeze this time...but yeah she got messed up...oh i should try casting it again...i bet that'll make the game freeze if i do...yEAH...the game froze again...just like before. actually i noticed it's funny...the first time i casted it just now when i loaded it up one more time the spell interrupted itself when it went forward, i'm supposing it was because she was too far away from the cliff when she cast it...or there was some difference in distance between her and the footmen compared to before. anyway there was no bug at that time because the spell apparently corrected itself. then i tried to do the same thing but interrupt it myself to see what would happen and she could walk up and down the cliff freely...but rather than moving normally her movement was restricted to a particular ovular sortof area around where i had casted it and where they had been moving around at. and then so her movement also wasn't so wiggly like before but it all possessed something of the attributes of what looked like she was surfing around on some water on a surfboard...really crazy stuff...anyway so yeah since her movement was befuddled and buggy i knew that it was the cue that if i cast the spell again the map would freeze and sure enough it did.
 
also, Jesus4Lyf, when i tried putting your Berserker thing in there it's not compiling for me, i'm not sure why but i get an error at the following line:
call this.destroy() // actually has garbage collection
JassHelper bug. Released a new version with that documented and a small fix.

Here's a working, compiling version.
JASS:
struct BerserkersCall extends SpellStruct
    implement SpellStruct
    
    private static method DURATION takes integer level returns real
        return 1.0*level
    endmethod
    
    private static trigger reorder
    private static unit move
    
    private method onDuration takes nothing returns nothing
        call SpellStruct(this).destroy() // actually has garbage collection
        // Alternatively:
        //call this.destroyTrigger(thistype.onOrder)
        //call this.stopTimer(thistype.onDuration) // actually will destroy the struct since it is no longer used
    endmethod
    private method afterZero takes nothing returns nothing
        call IssueTargetOrder(thistype.move,"attack",this.caster)
        call this.stopTimer(thistype.afterZero)
    endmethod
    private method onOrder takes nothing returns nothing
        if GetIssuedOrderId()!=OrderId("attack") or GetOrderTarget()!=this.caster then
            set thistype.move=GetOrderedUnit()
            call this.startTimer(thistype.afterZero,0.0)
        endif
    endmethod
    private method forAoE takes unit u returns nothing
        if IsUnitEnemy(u,this.owner) and not IsUnitType(u,UNIT_TYPE_DEAD) then
            call IssueTargetOrder(u,"attack",this.caster)
            call TriggerRegisterUnitEvent(thistype.reorder,u,EVENT_UNIT_ISSUED_ORDER)
            call TriggerRegisterUnitEvent(thistype.reorder,u,EVENT_UNIT_ISSUED_TARGET_ORDER)
            call TriggerRegisterUnitEvent(thistype.reorder,u,EVENT_UNIT_ISSUED_POINT_ORDER)
        endif
    endmethod
    private method onEffect takes nothing returns nothing
        set thistype.reorder=this.createTrigger(thistype.onOrder)
        call this.forUnitsInAoECaster(thistype.forAoE)
        call this.startTimer(thistype.onDuration,thistype.DURATION(this.level))
    endmethod
    
    private static method onInit takes nothing returns nothing
        set thistype.abil='A000'
        set thistype.defaultAoE=300.0
    endmethod
endstruct

I tried it on thunderclap. Seems to work. :thup:

Aside from that, I'd like to remind you that the demo map is not a demo map for the spells, but for the system. It is to demonstrate that the functionality works. I don't really care if I haven't handled edge-of-map collision or cliff detection in a slide spell, for example. Actually, it's quite pointless to even include instructions, since you should read the code to see what is running and what is the effect.
 
while i can understand your reasoning on leaving them out, if you put yourself in someone else's shoes, you might feel differently. let us suppose they simply downloaded a lot of test maps all at once into the same folder and just check everything out all at the same time...and anything broken they ignore. when stumbling across your map...it's easy to say...uhh...what was this map again? oh whatever...and move on...completely ignoring your test map...

because your test map didn't include the features i recommended, your system as a result doesn't get examined. that's the result that happened with me.

i've begun examining it now of course...but like i said...i ran into some issues with one of your spells in the test map...as a result...
i'm a man of practicality...because only half of the test map seems practical, the value of examining the system drops considerably.

anyway, i don't fully understand what's up with the system and how can you be sure there isn't a problem with the system rather than the spell when you haven't even bothered to fix the spell? you ought to fix it...like i said previously i don't remember seeing any spell at all that moves around the caster and the target...is that what your system does or isn't it? well apparently that's what the spell does but somehow it's not working. this caught my eye as something that is really cool...and awesome. so why not fix it up?

edit: btw i tested your new rewrite of the berserkerscall and now i'm getting an error message at the following line:
set thistype.reorder=this.createTrigger(thistype.onOrder)
it's saying cannot convert nothing to trigger
did you just try to tell me jasshelper got updated AGAIN? haha...ah man i wish it was a bit more newsworthy if that were the case...i think it gets updated more often than dota does!
 
i'm a man of practicality
Short posts are practical. ;)
how can you be sure there isn't a problem with the system rather than the spell
Encapsulation. I know where the code for moving the unit is, and how to fix it.
i don't remember seeing any spell at all that moves around the caster and the target...
It doesn't move the target, actually. The target is under the control of the player.
i tested your new rewrite of the berserkerscall and now i'm getting an error message at the following line:
set thistype.reorder=this.createTrigger(thistype.onOrder)
Update SpellStruct. :)
 
Short posts are practical. ;)

Encapsulation. I know where the code for moving the unit is, and how to fix it.

It doesn't move the target, actually. The target is under the control of the player.

Update SpellStruct. :)

wow, are you serious? well, now that you mention it, that makes ALOT more sense now why I was getting a beshortened duration when i extended the range to 1000...

and i can't help it if your spells leave a lot of stuff undone that needs to be mentioned...if you're the one that knows how to fix it, then doing so would decrease the size of my posts by a significant factor because i wouldn't have as many bugs to point out.

i just happened to think the spell was fascinating...but then again now that you've pointed out a fault in my understanding of what the spell is doing... and what's to blame once again is the lack of documention for the spell...but yet again your stand is that it's irrelevant and i respect that...well now i have to reconsider what i think of the spell, haha.

dude, it's still not compiling, why don't you stop wasting my time and confirm the compilation if you aren't doing so already, and then update the test map with a compiling version of that berserkerscall spell, and then get back to me on that.
 
dude, it's still not compiling, why don't you stop wasting my time and confirm the compilation
Here's a working, compiling version.
I don't say something is compiling if it is not. I have copied the latest version of SpellStruct (without changing anything) and the exact code I posted for Berserker's Call (without changing anything except the abilid) into a blank map, which is here attached, for your convenience. Just as I previously tested before posting. :)

Attack the troll with the footman, then have the Mountain King thunderclap near it, it will attack the Mountain King. Didn't test the continual force attack stuff.

This is not a thread about spells.
 

Attachments

  • test4.w3x
    41.9 KB · Views: 496
JASS:
method onFinish takes nothing returns nothing // When the effect finishes (or is interrupted).
                endmethod                                     // This will only fire if the effect fired.
                method onStopCast takes nothing returns nothing // When the spell stops being cast, or is cancelled.
                endmethod


...It fixes all kinds of WC3 errors...

You know what, i've always hated how the ENDCAST always fire, even if the spell was successfully casted.
I definitely consider it as a "wc3" error, it doesn't make sense.

You should fix it, just use an extra global boolean and launch this event only if the FINISH event wasn't fired first.

Anyway, that's already how i use this event, i just wanted to give my opinion.
 
launch this event only if the FINISH event wasn't fired first.
Hm. I thought about this carefully for a while, and figured it makes sense that there is a one-to-one relationship between beginning casting and ending casting. It doesn't make sense to fire the event earlier than casting is actually finished, so I think it makes sense the way it is...

The end cast event is guaranteed to fire so long as the start cast has, and same with finish fires if starts effect has fired. :thup:
 
*Shrugs*.
I still use the ENDCAST event like a CANCEL event (spell was interrupted before the end), i don't see anything bad with using FINISH to detect the end of the spell, but it's your script anyway.
 
I don't say something is compiling if it is not. I have copied the latest version of SpellStruct (without changing anything) and the exact code I posted for Berserker's Call (without changing anything except the abilid) into a blank map, which is here attached, for your convenience. Just as I previously tested before posting. :)

Attack the troll with the footman, then have the Mountain King thunderclap near it, it will attack the Mountain King. Didn't test the continual force attack stuff.

This is not a thread about spells.

thankyou for humouring me.

well, isn't that interesting...you...recreated a DOTA spell...lol you're usually complaining about other people doing that. well, whatever.

although i'm not clear exactly about what this system is for...and yeah i suppose i got off-topic and didn't ask...for that i apologize, i was distracted by the spells
...am i correct in understanding that this system just has structs that you can use for spells and so on? that being the case, i barely know how to use structs... so i can't really give the system a useful review until i learn them better.

do you want to make another thread to talk about that life drain spell or shall i? because i think it's interesting. i was going to say i wonder if you could make the spellcaster move according to where the target is...so that they would stay in 500 range...or does the spell do that already? ah but although i have more i wanted to touch on about the spell i'll leave it at that for now.
 
Well, i don't really want read the whole code but will it bug like SpellEvent in this case (just for potential users) ?

Also i understand why members are readonly but since it's designed for triggered spell, sometimes the user could want to change the target dynamically on some event, or such things.
And finally have a boolean isEnded to know if the cast was sucessfully ended or not would be useful (shouldn't be readonly as well)
 
will it bug like SpellEvent in this case (just for potential users) ?
I believe not. It attaches instances to [Unit, AbilId] so I'm pretty sure no.

And finally have a boolean isEnded to know if the cast was sucessfully ended or not would be useful (shouldn't be readonly as well)
I'll need to think about this some time. More benefit to have an event onComplete, I should think... :)
Is it even possible to detect how it ended?
 
I believe not. It attaches instances to [Unit, AbilId] so I'm pretty sure no.

I'll need to think about this some time. More benefit to have an event onComplete, I should think... :)
Is it even possible to detect how it ended?

Don't believe, be sure !

Zomg you rejected this idea of event before.
But since now i've stolen some Anitarf's code, a boolean seems better imho.
Also as i've said in my post, it's really spell dependant.
Most of the spell are done when the SPELL_EFFECT event fire (if you don't stop the unit on this event).
Let the user to decide when it's finished with this boolean, and set it to true on SPELL_FINISH event.
 
So, Jesus.

Just to give you something to add, why not try to make it so that you can effectively debug with this ingame?
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Varine Varine:
    A probate is usually done with a will, yes? If so I am sorry for your loss
    +1
  • The Helper The Helper:
    Yeah Tom, me too sorry for your loss buddy my mom told me she finds out her olds friend died from Google searching them. She had not talked to one of her old friends in a year and found out she died from Google. Also another one in the same session. RIP all of them my sincere condolences Tom
    +1
  • Varine Varine:
    We have some elderly guests that regularly come hang out at the bar at the end of the night, and every once in a while we don't see someone for a few weeks and then someone shows up with their obituary.
  • Varine Varine:
    We usually let them do their memorials there in the morning if they want to and I'll make them some snacks and drinks. There was one guy named Tom that came in like every night and would sit by himself and get a bunch of soup and a glass of wine. idk why but he LOVED our fucking soup, like he would order a fucking quart of it at a time and would always get so sad when we stop doing it for the summer.
    +1
  • Varine Varine:
    But he also loved our calamari, which is another thing I hate but it sells super well so I can't change it. There was one day he came in and was asking me how to make it, because he tried to at home once in the off season when we stop running it and he really wanted it lol
  • Varine Varine:
    I think he's one of the only people I've made recipes for for free because he really wanted a broccoli cheddar, and it was like dude I don't have a recipe, it's just whatever I have, but here, this is how you do it
  • Varine Varine:
    I don't think he ever figured out how to do the calamari in a pan though, like idk how to do that either. He was afraid of the at home deep fryers though and it's like yeah, that's fair, I am too
  • Varine Varine:
    He was just such a sweet old man, we had two servers pregnant and they held a baby shower together, he was soooooo fucking excited to get to see a baby. Unfortunately he died a month or so before they were born
  • The Helper The Helper:
    So I decided to Google some people that I had not seen or heard from in a while and sure enough one of my old best friends, we had a falling out years ago but whatever, find out he died of Pancreatic Cancer in January. I have also lost a few of my closer acquaintances from growing up the last year. Getting old - people die - I kinda thought it was going to be this way a few years ago....
    +2
  • The Helper The Helper:
    Forum running super slow again
  • Ghan Ghan:
    Not really clear from the stats as to what is causing the slowness.
  • Ghan Ghan:
    We get a lot of guest traffic so it may just be the load is getting too high and not from any particular source.
  • Ghan Ghan:
    Looks like the server is maxed out on CPU.
  • Ghan Ghan:
    Oh it looks like a lot of the traffic is Silkroad Forums. That domain isn't protected by Cloudflare.
  • Ghan Ghan:
    But the old Silkroad site is still on its own server. I just had a test site set up on this server for it.
  • Ghan Ghan:
    I just disabled that test site. Let's see if that helps the load.
  • Ghan Ghan:
    Looks much better already.
  • The Helper The Helper:
    I had actually forgot about the Silkroad site. I had asked
  • The Helper The Helper:
    SD Ryoko about it and he said the couple of people left on there really like it, that was a few years ago, maybe I should check back
  • jonas jonas:
    I guess when you're getting old, and the last day of soup season draws near, you start wondering
  • jonas jonas:
    will I make it to the start of the next season? or was this the last time I'll ever have my favorite dish?
  • The Helper The Helper:
    I am doing my first Vibe Coding project. In installed the environment and tools according to instructions but it is all chat doing this for me at my direction. It is fun really and holy shit I might finish in 2 hours what it would have taken a day to in my Access and this would be an electron app complete new
  • Ghan Ghan:
    Good stuff.
  • Ghan Ghan:
    Just make sure it is secure. :)
  • The Helper The Helper:
    It will only be on internal network

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials
      Top