1. Are you planning to upload your awesome spell or system to Hive? Please review the rules here.
    Dismiss Notice
  2. Updated Resource Submission Rules: All model & skin resource submissions must now include an in-game screenshot. This is to help speed up the moderation process and to show how the model and/or texture looks like from the in-game camera.
    Dismiss Notice
  3. DID YOU KNOW - That you can unlock new rank icons by posting on the forums or winning contests? Click here to customize your rank or read our User Rank Policy to see a list of ranks that you can unlock. Have you won a contest and still haven't received your rank award? Then please contact the administration.
    Dismiss Notice
  4. Lead your forces to battle in the 15th Techtree Contest. The call is yours, commander!
    Dismiss Notice
  5. The reforging of the races is complete. Come see the 14th Techtree Contest Results.
    Dismiss Notice
  6. It's time to choose your horse in the race - the 32nd Modeling Contest Poll is up!
    Dismiss Notice
  7. Check out the Staff job openings thread.
    Dismiss Notice
Dismiss Notice
60,000 passwords have been reset on July 8, 2019. If you cannot login, read this.

Jaina Spellpack v1.1.0

Submitted by JAKEZINC
This bundle is marked as pending. It has not been reviewed by a staff member yet.
[​IMG]

"Is talking all you demons do?" - The Frost Mage

[​IMG]
[​IMG]
[​IMG]

It contains: 5 hero abilities (shown), 4 mastered abilities, 4 unit abilities (shown), 1 standard ability.
[​IMG] [​IMG] [​IMG] [​IMG] [​IMG] [​IMG] [​IMG] [​IMG] [​IMG]


- Credits -
kangyun
Mythic
Mc !
dhguardianes
AGD
hemmedo
Flux
TriggerHappy
Bribe
Nestharus
MyPad
Vexorian
chopinski
(If you don't see your name on this credit list, just reply on this resource)

- Notes -
How To Import A Spell/System
Contents

JAINA SPELLPACK (Map)

  1. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    Elsa is here x)

    No more fancy GIFs for each ability demo
    (They consume a lot of cellular data :/)

    Just download the map and test or play in action!
    (If you ever wonder its file size: 75% custom loading screen, 20% custom models, 5% code and map things)

    The systems I'm using are as usual as before,
    expect that they're constantly present on my upcoming resources
    So having these already in your map is a convenience.

    I've also implemented a PauseLibrary,
    so that you can just configure once on its global configuration.
    In the making of this spellpack, I've noticed a lot of circumstances
    where the pause/unpause method breaks, (only in rare cases)
    As I can't tolerate such thing, this is made to guarantee a full-safety of its functionality.
    (Just read its documentation)

    After this, I'm also developing a significant update to Archimonde as well.

    Eventually, I'll be moving on to the next spotlight: Kael'thas.
    The theme is fel + fire. His concept was already established by hemmedo.
    (I'll start to code him once I get back)

    That's all for now. Enjoy!
     
  2. chopinski

    chopinski

    Joined:
    May 16, 2012
    Messages:
    292
    Resources:
    1
    Spells:
    1
    Resources:
    1
    Casting Frostbolt crashes the game for me. Pretty cool spells, good job!
     
  3. troylowyee

    troylowyee

    Joined:
    Apr 13, 2008
    Messages:
    168
    Resources:
    2
    Maps:
    2
    Resources:
    2
    ah me too! But otherwise really cool spells. The glacial storm was amazing!
     
  4. Daffa

    Daffa

    Joined:
    Jan 30, 2013
    Messages:
    8,047
    Resources:
    30
    Packs:
    1
    Maps:
    9
    Spells:
    18
    Tutorials:
    2
    Resources:
    30
    Frostbolt works fine for me. Pretty neat stuff here.
     
  5. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    That's strange and alarming. I'm always ensuring that there would be no bugs or crashes... Maybe it's related to a patch :/
    However, I can guarantee that this is 100% safe and tested on versions that still relates to 1.30.4. (I'm using this editor version)
    I'll take a look on it. Thanks for the feedback =)
     
  6. chopinski

    chopinski

    Joined:
    May 16, 2012
    Messages:
    292
    Resources:
    1
    Spells:
    1
    Resources:
    1
    Oh that's probably it, I'm on latest patch.
     
  7. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    I can't solve this alone as I don't have reforged versions yet.
    Perhaps you could test this code?
    Code (vJASS):
    library Frostbolt /*


        */
    uses /*

        */
    Buff               /* https://www.hiveworkshop.com/threads/288640/
        */
    UnitDex            /* https://www.hiveworkshop.com/threads/248209/
        */
    SpellEvent         /* https://www.hiveworkshop.com/threads/301895/
        */
    SpellCloner        /* https://www.hiveworkshop.com/threads/292751/
        */
    DummyRecycler      /* https://www.hiveworkshop.com/threads/277659/
        */
    ZLibrary           /* https://www.hiveworkshop.com/threads/237821/

        */


        /**************************************************
        *                GLOBAL CONFIGURATION
        ***************************************************/

        globals

            private constant real PERIODIC_INTERVAL = 0.03125

            private constant real MODEL_DEATH_TIME  = 2.5

            /*
            *  Note that when importing, make sure the two objects (Buff Creator and the Buff)
            *  In object editor have the same rawcode except for their first characters
            *  You can easily customize rawcodes using an object merger script or Grimoire extension
            *  This feature makes the ability to work like a debuff (with Dispel library)
            *  The slow-stats are configurable inside the Object Editor, on the buff creator itself
            */

            //                             Chilled Ability Buff Creator ID
            private constant integer BUFF_CREATOR_ID = 'ACHL'
            //                              The model of the Chilled buff
            private constant string  BUFF_MODEL = "war3mapImported\\ChilledColdBuff.mdx"
            private constant string  BUFF_MODEL_ORIGIN = "chest"

        endglobals

            // Filtration of the units that will be targeted
        private function Filtration takes unit picked, player owner returns boolean
            return IsUnitEnemy(picked,owner)                    and /*
                */
    not IsUnitType(picked,UNIT_TYPE_STRUCTURE)   and /*
                */
    not IsUnitType(picked,UNIT_TYPE_MAGIC_IMMUNE) and /*
                */
    UnitAlive(picked)
        endfunction
        /**************************************************
        *           END OF GLOBAL CONFIGURATION
        ***************************************************/


        /*============================= CORE CODE =============================*/

        native UnitAlive takes unit id returns boolean

        globals
            private constant integer DEFAULT_PITCH = 90
            private integer array index
            private group Group = CreateGroup()
        endglobals

        public struct ChilledBuff extends Buff
            public effect model
            readonly static string buffModel = BUFF_MODEL
            readonly static string buffModelOrigin = BUFF_MODEL_ORIGIN
            private static constant integer RAWCODE = BUFF_CREATOR_ID
            private static constant integer DISPEL_TYPE = BUFF_NEGATIVE
            private static constant integer STACK_TYPE = BUFF_STACK_NONE
            method onRemove takes nothing returns nothing
                call DestroyEffect(.model)
                set .model = null
            endmethod
            method onApply takes nothing returns nothing
            endmethod
            implement BuffApply
        endstruct

        struct Frostbolt extends array

            implement SpellClonerHeader

            real size
            real height
            real distance
            real range

            real radius
            real velocity
            real damage
            real duration

            integer count

            string projectileModel
            string projectileModelOrigin
            string hitModel
            string hitModelOrigin

            boolean reduction

            attacktype attackType
            damagetype damageType
            weapontype weaponType

            readonly unit caster
            readonly unit target
            readonly unit projectile

            readonly real sizeReduction
            readonly real damageReduction

            private effect model

            readonly static constant real SPELL_PERIOD = PERIODIC_INTERVAL

            private method onSpellStart takes nothing returns thistype
                local real x
                local real y
                local real angle
                call this.initSpellConfiguration( GetEventSpellAbilityId() )
                if .count > 0 then
                    set .caster = GetEventSpellCaster()
                    set .target = GetEventSpellTargetUnit()

                    set x = GetUnitX(.caster)
                    set y = GetUnitY(.caster)
                    set angle = Atan2(GetEventSpellTargetY()-y,GetEventSpellTargetX()-x)
                    set x = x + .distance*Cos(angle)
                    set y = y + .distance*Sin(angle)

                    set .projectile = GetRecycledDummy(x,y,.height,angle*bj_RADTODEG)
                    call SetUnitScale(.projectile,.size,0,0)
                    set .model = AddSpecialEffectTarget(.projectileModel,.projectile,.projectileModelOrigin)
                    if .reduction then
                        set .sizeReduction   = .size/count
                        set .damageReduction = .damage/count
                    endif
                    return this
                else
                    return 0
                endif
            endmethod

            private method onSpellPeriodic takes nothing returns boolean
                local unit picked
                local ChilledBuff chilled

                local real x1  = GetUnitX(.projectile)
                local real x2  = GetUnitX(.target)
                local real y1  = GetUnitY(.projectile)
                local real y2  = GetUnitY(.target)
                local real z1  = GetUnitFlyHeight(.projectile) + GetTerrainZ(x1,y1)
                local real z2  = GetUnitFlyHeight(.target) + .height + GetTerrainZ(x2,y2)
                local real ang = Atan2(y2-y1,x2-x1)
                local real dis = SquareRoot( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1) )
                //local real phi = Atan2(z2-z1,dis)
                local integer count = 0

                //call SetUnitX(.projectile,x1 + .velocity*Cos(ang)*Cos(phi) )
                //call SetUnitY(.projectile,y1 + .velocity*Sin(ang)*Cos(phi) )
                call SetUnitX(.projectile,x1 + .velocity*Cos(ang) )
                call SetUnitY(.projectile,y1 + .velocity*Sin(ang) )
                //call SetUnitFlyHeight(.projectile,z1 + .velocity*Sin(phi)-GetTerrainZ(x1,y1),0)
                //call SetUnitAnimationByIndex(.projectile,R2I(phi*bj_RADTODEG+0.5)+DEFAULT_PITCH)
                call SetUnitFacing(.projectile,ang*bj_RADTODEG)

                set dis = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)
                if (dis <= .range*.range) then
                    call DestroyEffect( AddSpecialEffectTarget(.hitModel,.target,.hitModelOrigin) )
                    call UnitDamageTarget(.caster,.target,.damage,false,false,.attackType,.damageType,.weaponType)
                    set chilled = ChilledBuff.add(.caster,.target)
                    set chilled.duration = .duration
                    if (chilled.model == null) then
                        set chilled.model = AddSpecialEffectTarget(ChilledBuff.buffModel,.target,ChilledBuff.buffModelOrigin)
                    endif
                    set .count = .count - 1
                    if  .count > 0 then
                        if .reduction then
                            set .size   = .size   - .sizeReduction
                            set .damage = .damage - .damageReduction
                        endif
                        call GroupEnumUnitsInRange(Group,x1,y1,.radius,null)
                        loop
                            set picked = FirstOfGroup(Group)
                            exitwhen picked == null
                            if Filtration( picked,GetOwningPlayer(.caster) ) and picked != .target then
                                set count = count + 1
                                set index[count] = GetUnitUserData(picked)
                            endif
                            call GroupRemoveUnit(Group,picked)
                        endloop
                        if count > 0 then
                            set z1 = GetUnitFlyHeight(.projectile)

                            call DestroyEffect(.model)
                            call DummyAddRecycleTimer(.projectile,MODEL_DEATH_TIME)
                            set .target = GetUnitById(index[GetRandomInt(1,count)])
                            set .model     = null
                            set .projectile = null

                            set .projectile = GetRecycledDummy(x1,y1,z1,Atan2(GetUnitY(.target)-y1,GetUnitX(.target)-x1)*bj_RADTODEG)
                            call SetUnitScale(.projectile,.size,0,0)
                            set .model = AddSpecialEffectTarget(.projectileModel,.projectile,.projectileModelOrigin)
                        endif
                    else
                        return false
                    endif
                endif
                return UnitAlive(.target)
            endmethod

            private method onSpellEnd takes nothing returns nothing
                if .model != null and .projectile != null then
                    call DestroyEffect(.model)
                    call DummyAddRecycleTimer(.projectile,MODEL_DEATH_TIME)
                    set .model     = null
                    set .projectile = null
                endif
                set .caster = null
                set .target = null
            endmethod

            implement SpellEvent
            implement SpellClonerFooter

        endstruct

        module FrostboltConfigurationCloner

            private static method configHandler takes nothing returns nothing
                local Frostbolt clone           = Frostbolt.configuredInstance
                // Configuration by constants
                set clone.size                 = PROJECTILE_MODEL_SIZE
                set clone.height               = PROJECTILE_MODEL_HEIGHT
                set clone.distance             = PROJECTILE_MODEL_DISTANCE
                set clone.range                = PROJECTILE_DETECT_RANGE
                set clone.projectileModel      = PROJECTILE_MODEL
                set clone.projectileModelOrigin = PROJECTILE_MODEL_ORIGIN
                set clone.hitModel             = PROJECTILE_HIT_MODEL
                set clone.hitModelOrigin       = PROJECTILE_HIT_MODEL_ORIGIN
                set clone.attackType           = ATTACK_TYPE
                set clone.damageType           = DAMAGE_TYPE
                set clone.weaponType           = WEAPON_TYPE
                // Configuration with levels
                set clone.count                = count(GetEventSpellLevel())
                set clone.radius               = radius(GetEventSpellLevel())
                set clone.velocity             = velocity(GetEventSpellLevel())
                set clone.damage               = damage(GetEventSpellLevel())
                set clone.duration             = duration(GetEventSpellLevel())
                set clone.reduction            = reduction(GetEventSpellLevel())
            endmethod

            private static method onInit takes nothing returns nothing
                call Frostbolt.create(thistype.typeid,ABILITY_ID,SPELL_EVENT_TYPE,function thistype.configHandler)
            endmethod

        endmodule

    endlibrary


    I've commented out some of the suspected code, especially the phi calculation...
     
  8. chopinski

    chopinski

    Joined:
    May 16, 2012
    Messages:
    292
    Resources:
    1
    Spells:
    1
    Resources:
    1
    tested it and the problem persist. I was trying to comment blocks of code to try finding or narrow down where the problem is, and it seems that the crash is caused probably by one of the libraries used to create the system rather than this code specifically, because neither onSpellStart or the periodic method execute.
     
  9. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    Have you tried disabling the Multi Frostbolt code? (inside the modified abilities folder)
    It's very strange that only frostbolt encounters this. There's nothing special about it except for its modified version.
    The libraries used are working properly from other abilities. My last suspicious is that Multi Frostbolt. (its co-existing)

    I hope you can test one more time by disabling Multi Frostbolt?
    Otherwise, If it persists then sadly I can't do anything about it,
    I'll just make a note that this frostbolt ability can crash on latest patch. (For unknown reason)

    If it didn't crash by disabling it then I highly doubt on a system which can be fixed somehow.
    Thanks for a handy test and report ;)
     
  10. chopinski

    chopinski

    Joined:
    May 16, 2012
    Messages:
    292
    Resources:
    1
    Spells:
    1
    Resources:
    1
    It was the Multi Frostbolt!
     
  11. RCF

    RCF

    Joined:
    Sep 17, 2018
    Messages:
    5
    Resources:
    0
    Resources:
    0
    It works !
     
  12. RCF

    RCF

    Joined:
    Sep 17, 2018
    Messages:
    5
    Resources:
    0
    Resources:
    0
    Why when i summon elemental frost, the elemental stay in pause or issu stop order in periodic interval ? Thank you for response ! Very good job
     
  13. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    Thanks for clarifying!

    I'm glad to conclude that there's nothing wrong about the actual Frostbolt. (but only on its modified one: Multi Frostbolt)
    I'll just include the crash fix for latest patches on its v1.1.0 update after Archimonde's v1.1.0 update.
    This is system & patch related problem though... (So it may take some time to identify the root cause of this)
     
  14. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    What patch you're using? Have you reproduced this problem on a first cast?
    If that's so, is the elemental's command card blacked out? Did you touch the PauseLibrary at least?
     
  15. RCF

    RCF

    Joined:
    Sep 17, 2018
    Messages:
    5
    Resources:
    0
    Resources:
    0
    1.32 , yes is totaly stop and if i disable pause channeling elemental's can't move, stop with each action, i have optimise pauseLibrary ( report ID ) i do not understand
     
  16. Daffa

    Daffa

    Joined:
    Jan 30, 2013
    Messages:
    8,047
    Resources:
    30
    Packs:
    1
    Maps:
    9
    Spells:
    18
    Tutorials:
    2
    Resources:
    30
    @JAKEZINC will add that 1.31 patch is stable.
     
  17. hemmedo

    hemmedo

    Joined:
    Jun 13, 2008
    Messages:
    312
    Resources:
    0
    Resources:
    0
    Lol, we could say that Reforged even managed to screw this resource up as well :D
     
  18. JAKEZINC

    JAKEZINC

    Joined:
    Aug 13, 2013
    Messages:
    1,461
    Resources:
    9
    Spells:
    9
    Resources:
    9
    Yeah, I can't even encounter some bugs also. It looks like it's plaguing the versions 1.32+ :/

    EDIT:

    I'll make the spells that requiring each other to 'work independently' on the next update.
    So this means, even if there's a single ability that bugs on latest patches, you can still import
    the stable ones. This can be achieved by making them an optional prerequisites.

    As of today, I don't mod on reforged editor. (although I care for my resource's compatibility)
     
    Last edited: May 22, 2020
  19. AGD

    AGD

    Joined:
    Mar 29, 2016
    Messages:
    457
    Resources:
    13
    Spells:
    7
    Tutorials:
    1
    JASS:
    5
    Resources:
    13
    In Archimonde Spellpack, there is also a spell that uses a similar code, called Doomfire Judgement. I also don't have Reforged so I can't test this. Can you see if Doomfire Judgement also crashes in Reforged? If so, there is some problem in one of the system used :|.