Spell Multicast

Chaos_Knight

New Member
Reaction score
39
Try this:
JASS:
scope Multicast initializer InitTrig

    globals
        private constant integer ABILITY_ID 		  = 'A000' //Raw code of the ability
        private constant integer DUMMY_ID 	          = 'dumy' //Raw code of the dummy
	
        private constant string  TEXTTAG_TEXT         = "Multicast !"
        private constant real    TEXTTAG_HEIGHT       = 15.
        private constant real    TEXT_SIZE            = 0.023
        private constant real    LIFE_TIME_DUMMY 	  = 2.     // How long the dummy will last, if you use spells like blizzard you would want to make this longer.
        private constant real    SPELL_DELAY 		  = .2 	   // Sets the delay between the casted spell and the multicasted spell
        private constant real	 LIFE_TIME_TEXT 	  = 3.     // Time util text disappear
        private constant real	 TEXT_FADE_POINT 	  = 2.     // Time it takes before the text start to fade out
        private constant integer TEXT_COLOR_RED       = 255    // The "red" color of the texttag
        private constant integer TEXT_COLOR_GREEN     = 0      // The "greed" color of the texttag
        private constant integer TEXT_COLOR_BLUE      = 0      // The "blue" color of the texttag
        private constant integer TEXT_COLOR_ALPHA     = 0      // The "alpha" color of the texttag (Transparency)
    endglobals

    private constant function Chance takes integer spellLvl returns real
        return 12. + (8. * spellLvl)
    endfunction

//=========================================================\\
//========== Nothing to edit past this point ==============\\
//=========================================================\\

    private function Conditions takes nothing returns boolean
        return GetUnitAbilityLevel(GetTriggerUnit(), ABILITY_ID) > 0 and GetRandomInt(1, 100) <= Chance(GetUnitAbilityLevel(GetTriggerUnit(), ABILITY_ID))
    endfunction

    private function Actions takes nothing returns nothing
        local unit   u  = GetTriggerUnit()
        local real   x  = GetUnitX (u)
        local real   y  = GetUnitY (u)
        local player p  = GetOwningPlayer(u)
        local unit   tu = CreateUnit(p, DUMMY_ID, x, y, 270)
        local unit   t  = GetSpellTargetUnit()
        local real   tx = GetSpellTargetX()
        local real   ty = GetSpellTargetY()
        local string s  = UnitId2String(GetUnitCurrentOrder(u))
        local texttag tt
        local integer spellid = GetSpellAbilityId()
        
        call UnitApplyTimedLife( tu, 'BTLF', LIFE_TIME_DUMMY )
        call UnitAddAbility( tu, GetSpellAbilityId() )
        call SetUnitAbilityLevel (tu, ABILITY_ID, GetUnitAbilityLevel(u, ABILITY_ID ) )
        
      //============= This is for the Multicast text, don't edit ===================\\
            set tt = CreateTextTag()
            call SetTextTagText ( tt, TEXTTAG_TEXT, TEXT_SIZE )
            call SetTextTagPos ( tt, x, y, TEXTTAG_HEIGHT )
            call SetTextTagColor (tt, TEXT_COLOR_RED, TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_ALPHA )
            call SetTextTagVelocity ( tt, 0.0355 * Cos(90. * bj_DEGTORAD), 0.0355 * Sin( 90. * bj_DEGTORAD ) )
            call SetTextTagVisibility ( tt, true )
            call SetTextTagFadepoint ( tt, TEXT_FADE_POINT )
            call SetTextTagLifespan ( tt, LIFE_TIME_TEXT )
            call SetTextTagPermanent ( tt, false )
      //==========================================================================\\
        
        call TriggerSleepAction( SPELL_DELAY )
        
        if GetRectMaxX( bj_mapInitialPlayableArea ) > tx and GetRectMinX( bj_mapInitialPlayableArea ) < tx and GetRectMaxY( bj_mapInitialPlayableArea ) > ty and GetRectMinY( bj_mapInitialPlayableArea ) < tx then
            call IssuePointOrder ( tu, s, tx, ty )
        elseif GetSpellTargetUnit() != null then
            call IssueTargetOrder( tu, s, t )
            call IssueImmediateOrder( tu, s )
        endif
        
        set p  = null
        set u  = null
        set tu = null
        set t  = null
        set s  = null
        set tt = null
    endfunction

    private function InitTrig takes nothing returns nothing
        local trigger t = CreateTrigger()
        
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t, Condition(function Conditions))
        call TriggerAddAction(t, function Actions)
    endfunction

endscope

Koma, i think SweishChef, didnt want to let you do his work... :(
 

SwedishChef

New Member
Reaction score
32
I wanted help with the Jass trigger. I actually asked him personally to fix it since I have just very basic Jass knowledge. :)
 

SanKakU

Member
Reaction score
21
i didn't really look at the code much since there seems to be a lot of it...but, if i may make a suggestion...

are you using a dummy unit to cast the second helping of whatever spell is getting multicasted? if that's the case...why don't you spawn the dummy unit at the target unit's position instead of the caster's? or maybe half way in between or something...if range is a problem for whatever reason.
 

SwedishChef

New Member
Reaction score
32
If I would spawn the dummy at the same position as target is there would be some problems. First some spells don't have targets so they wont work secondly spells like fire breath will look bad and not hit the targets it should hit. But I was thinking something like moving the dummy unit 20 range closer and maybe see if that fixes the problem. Right now I got loads of work in school so I'm short on time.
 

Chaos_Knight

New Member
Reaction score
39
Make a good header.

Like:
JASS:
// +-------------------------------------------------------------------------------+
// |     Moving Strikes - Created by Chaos_Knight.  Requires a vJass preprocessor! |   
// +-------------------------------------------------------------------------------+
// | Gives a small chance to move the Attacker to the GetAttacker() and            |
// | deals damage to the GetTriggerUnit()                                          |
// +-------------------------------------------------------------------------------+
// | How to Import:                                                                |
// |  - Create a new trigger                                                       |
// |  - Convert it to Custom text (Edit > Convert to Custom Text)                  |
// |  - Replace everything there with this code                                    |
// |  - Change the constants to suit yourself                                      |
// |  - Enjoy!                                                                     |
// +-------------------------------------------------------------------------------+


Thats not very good, but i assume you understand what i mean. :D
 

HeX.16

Isn't Trollin You Right Now
Reaction score
131
Make a good header.

Like:
JASS:
// +-------------------------------------------------------------------------------+
// |     Moving Strikes - Created by Chaos_Knight.  Requires a vJass preprocessor! |   
// +-------------------------------------------------------------------------------+
// | Gives a small chance to move the Attacker to the GetAttacker() and            |
// | deals damage to the GetTriggerUnit()                                          |
// +-------------------------------------------------------------------------------+
// | How to Import:                                                                |
// |  - Create a new trigger                                                       |
// |  - Convert it to Custom text (Edit > Convert to Custom Text)                  |
// |  - Replace everything there with this code                                    |
// |  - Change the constants to suit yourself                                      |
// |  - Enjoy!                                                                     |
// +-------------------------------------------------------------------------------+


Thats not very good, but i assume you understand what i mean. :D

Lol i can see that helping the spell.
 

SanKakU

Member
Reaction score
21
If I would spawn the dummy at the same position as target is there would be some problems. First some spells don't have targets so they wont work secondly spells like fire breath will look bad and not hit the targets it should hit. But I was thinking something like moving the dummy unit 20 range closer and maybe see if that fixes the problem. Right now I got loads of work in school so I'm short on time.

maybe you should just check the order string or something... are we running into the problem only on the order string that chain lightning uses? if so, maybe we can change the string?
 

SwedishChef

New Member
Reaction score
32
Yeah and only when you use the spell at maximum range. The order string can't be changed very much so I think the problem has to do with the chain lightning going over maximum range.
 

SanKakU

Member
Reaction score
21
that's why i suggested changing the position of the dummy unit before multicasting. if moving it 100 range closer to the target fixes chain lightning...i think graphically it will not be so hard to adjust to...in fact, it might even look BETTER than having the dummy unit exactly where the caster is, idk.
 

Weep

Godspeed to the sound of the pounding
Reaction score
400
Yeah and only when you use the spell at maximum range.
Well, from one point of view, if the target has moved out of range before the multicast has occurred, you could argue that it shouldn't cast a second time.

That said, you know the IssueOrder natives return a boolean if the order was successful? As such, with an immovable dummy, it would return false if the target is out of range (as well as other reasons, like the target has died, gone invulnerable, gone out of sight, etc.)
 

SwedishChef

New Member
Reaction score
32
Hm got an idea now. If I give the dummy max ms it will be able to hunt it down and cast the spell maybe. Then I just have to lower the dummy duration. Will think about it.
 

Komaqtion

You can change this now in User CP.
Reaction score
469
This will still look weird...

I'd say don't do it. And also, the target unit might also have max ms :S

But as Weep said, this should still not quite work like it does atm :S
But sure, this can be done... As SanKaKU said, just move/create the dummy the range of the spell from the target towards the caster :D
That'll solve all of your problems ;)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Howdy
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top