• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Requests] Request your vJASS spells here

Status
Not open for further replies.

Deleted member 219079

D

Deleted member 219079

Requesting
Request for vjass only. I'll look for requests one week old at max to keep the pace, but feel free to post a reminder of your dated request if you really need it. When I finish the request, give me credits in the project you use it on. If I'll use dummy unit, get the obj data and model here. In case I use external libraries, I will post links to them. In case you can't get the spell working, feel free to tell about it here. Multiple requests are not taken, which includes spell packs. In case you need GUI globals to configure the spells, ask for it.

Taking requests
As said before, I'll look for 7 days or younger requests. I will do them in order of which is most interesting. I will take system requests too, but not big, even normal ones. Don't feel upset if I don't take your request, in that case you're free to delete the post and create its own thread for it.

Finished requests
-will be posted to this thread
 

Attachments

  • dummy.rar
    4.8 KB · Views: 91
Last edited by a moderator:
Level 3
Joined
Jun 29, 2014
Messages
28
Hi, Can i request jass? I want to make AOS map. But, for more interesting, I need AI. Can you make me a Ai JAss? But it can be add or remove. ( Because i want to make many hero )
 

Deleted member 219079

D

Deleted member 219079

AI is not that small of a system. But worry not, I'm creating an AI system as a side project of mine, I can PM it to you once it's ready. It'll take about 2 months.

Edit: I suggest you use one of the existing AoS AIs, my AI won't be able to buy items and stuff.
 
Level 22
Joined
Sep 24, 2005
Messages
4,821
It's better if you let jondrean work on your map too, building AI isn't like making spells, it would work better if jondrean has access to the map. Good luck.
 

Deleted member 219079

D

Deleted member 219079

It's a Melee AI. It can easily be configured into not using workers and building for anything, so it'd work for AoS as well :) But yeah, maybe I could make a plugin for that.
 

Deleted member 219079

D

Deleted member 219079

If I understood what you just google translated, yes.

AI is a long and a difficult project. It won't be ready after 2 months, but maybe it could function a little on an open map.

Plus I'm running multiple projects at the same time.
 
Level 3
Joined
Jun 29, 2014
Messages
28
Oh man, i don't using google translate. I'm indonesian. Try to understand english. Sorry if it not good. But, thx for your help
 

Deleted member 219079

D

Deleted member 219079

I made a signature pic for this thread, if you wanna support this thread copy my sig.
 

Deleted member 219079

D

Deleted member 219079

sup, can I request something personal on you're own time? respond to me when you feel most creative and relaxed

oh, and browse my photo album while you're at it =D
if it's super personal/goes to your project as it's unique system send it via PM but otherwise request it here.

And I'm never creative and relaxed lolol
 
Level 15
Joined
Nov 30, 2007
Messages
1,202
Farms train or Spawn Pack Horses that walks to a targeted Town Hall. (The farm uses an ability to change destination.) Also, it can only have 2-3 living Pack Horses from each farm at a time. Greater then that and it should stop producing and start red-pinging the map at the farm. Perhaps even add a ability to "Find Pack Horse" which would cycle through the living pack horses from the farm, alternativly the pack horse could be a worker and would show up as idle and thus making the spell unnecessary.

When the Pack Horse reach the Town the supply is converted into Mana regeneration. Which is used to give mana to nearby units. The town should have the spell Spirit Touche. And when casted it should give mana to all nearby units until its emty. The mana given should be proportional to the mana it has - meaning, when its emty no more units will recieve mana.

If you want to continue...
The mana of every unit decreases over time and when it reaches 0 the unit is given a debuff that makes it move/attack slower and have negative life regeneration until it recieves mana again.

I hope you like my request and find the time to do it. I would be greatful!

Additional Detail:
- If the town has full mana it can't unload, if it doesn't unload all mana the supply unit remains alive until empty.
- The Town can't be given more mana then its capacity.
- The mana each supply unit spawns with should be customizeable from one building to another.
 
Last edited:
Level 4
Joined
Mar 24, 2012
Messages
83
A spell that would when cast ally and load the unit, then when the unit exits go back to being hostile. Can't be cast on a unit with another unit already embarked, and the target has to be hostile, not a player.
 
Last edited:

Deleted member 219079

D

Deleted member 219079

When cast, the hero and X (based on ability level) amount of units adjacent to the hero gain bonus damage equal to the strength of the hero to their next melee attack.
That's so simple ability, but I'm sorry when I have to put you in the queue xp

I have some work to do irl and some other projects so I'm afraid I can't complete current requests that fast.

When I have time I do the requests listed on the OP depending which is the oldest one.
 

Deleted member 219079

D

Deleted member 219079

Okey, will try to do it myself then.
Oh please no, I'm halfway on your system >_>

I need more intel from you; you say it's done via spawning/training. So will it automatically spawn it for free or what?
 

Deleted member 219079

D

Deleted member 219079

Anyone who's interested on helping here is free to do so

Your field can be anything, GUI, jass ot vjass any help is appreciated
 
Level 3
Joined
Jul 15, 2014
Messages
44
Anyone who's interested on helping here is free to do so

Your field can be anything, GUI, jass ot vjass any help is appreciated

hmm jondrean.. i think you should edit the first post for make everonyone get notice that you want to hire some people to help you on vJASS.. just a humble advice. :ogre_hurrhurr:

Anyways what a good job mate on helping others ^O^
 

Deleted member 219079

D

Deleted member 219079

So I got enough time to make Jack of Heart's request. Maybe I'll do Zoor's today or tomorrow.

About the finished spell;
If you will use Unit or Point targeting method for the ability, I could add so that when targeted ground, any current loaded unit would leave the unit.

Also you may want to configure the TargetFilter function a little, currently it allows buildings to be loaded. Although you could check this at object editor.
 

Deleted member 219079

D

Deleted member 219079

Guys, hit me with a request. Weekend is coming and I've no things to do.


Or if some of those old requesters want theirs done now, say so.
 
Level 21
Joined
Jul 6, 2014
Messages
6,791
Alright here we go:dark force
The caster shoots a dark wave that pushes everything out of the way and drains their magic.there movement speed is decreased by 10%for 30 seconds
 

Deleted member 219079

D

Deleted member 219079

tomorrow is friday, so I'll get on with it then
 

Deleted member 219079

D

Deleted member 219079

Alright here we go:dark force
The caster shoots a dark wave that pushes everything out of the way and drains their magic.there movement speed is decreased by 10%for 30 seconds
JASS:
scope DarkWave initializer init
    native UnitAlive takes unit uid returns boolean
    /*
        [vJASS] Dark Wave v1.0.2
            by jondrean
            
            Date: 9.11.2014
            Updated: 10.11.2014
            
            The caster shoots a dark wave that
            pushes everything out of the way
            and drains their magic. Their
            movement speed is decreased by
            10% for 30 seconds
            
            Credits: Moyackx, Vexorian and Malhorne
            
        This spell requires TimerUtils, MalhorneAlloc
        and TerrainPathability
    */
    globals
        private constant integer A_SPELL    = 'A002' // id of your spell
        //private constant integer A_SLOW     = 'A000' // if of the slow
        private constant integer U_DUMMY    = 'h000' // id of your dummy
        private constant integer A_FLY      = 'Arav' // id of crow ability
        private constant real DUMMY_HEIGHT  = 50. // height of the wave dummy
        private constant player P_EFFECT    = Player(PLAYER_NEUTRAL_PASSIVE) // owner of dummy
        private constant string EF_WAVE     = "Abilities\\Spells\\Undead\\CarrionSwarm\\CarrionSwarmMissile.mdl" // look of the dark wave itself
        private constant string EF_HIT      = "Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl" // look of hit event
        private constant string EF_HIT_ATTACH= "chest" // attach point of EF_HIT
        private constant real ACC_DURATION  = 1.166 // ACCURATE duration of the spell
        private constant real INTERVAL      = 0.03125000 // FPS, currently set to 32
        private constant real KNOCK_FORCE   = 28.126 // staring speed of kb
        private constant real KNOCK_LOSS    = 2 // loss of kb, per interval
        private constant real TT_Z_OFFSET   = 50 // z offset from ground to floating text
        private constant string TT_C        = "|c003366ff" // color of floating text
        private constant real TT_HEIGHT     = 0.023 // height of the floating text
        private constant real TT_LIFESPAN)  = 2.5 // complete lifespan of the floating text
        private constant real TT_FADEPOINT  = 1.5 // the point where floating text starts to fade
        private constant real TT_X_VEL      = 0 // the x speed of the floating text
        private constant real TT_Y_VEL      = 0.1 // the y speed of the floating text
    endglobals
    // target filter
        // caster - caster of spell
        // owner - owner of caster
        // U - target
        //! textmacro Filter
            return IsUnitEnemy(U, owner) and UnitAlive(U) and not IsUnitType(U, UNIT_TYPE_MAGIC_IMMUNE) and GetUnitAbilityLevel(U,'Bvul')==0
        //! endtextmacro
    // getters
        private constant function GetMissileSpeed takes integer level returns real
            return 28.125 // if FPS is 32, this is 900 speed
        endfunction
        private constant function GetDamage takes integer level returns real
            return 25.+50*(level) // damage per target, 75,125,175
        endfunction
        private constant function GetAoE takes integer level returns real
            return 100.
        endfunction
    // endgetters
    // useful
        private function Atan3 takes real x1, real y1, real x2, real y2 returns real
            local real a = Atan2(y2 - y1, x2 - x1)
            if a < 0 then
                return 2 * bj_PI + a
            endif
            return a
        endfunction
    // enduseful
    private struct Push extends array
        unit me
        real xOff
        real yOff
        real x
        real y
        real f
        readonly static group g = CreateGroup()
        //! runtextmacro MA()
        private static method onExpire takes nothing returns nothing
            local thistype this = thistype(0).next
            loop
                exitwhen this == 0
                if UnitAlive(me) then
                    set x = x+xOff*f
                    set y = y+yOff*f
                    if IsTerrainWalkable(x,y) then
                        call SetUnitX(me, x)
                        call SetUnitY(me, y)
                        set f = f - KNOCK_LOSS
                        if f <= 0 then
                            call GroupRemoveUnit(g, me)
                            set me = null
                            call deallocate()
                        endif
                    else
                        call GroupRemoveUnit(g, me)
                        set me = null
                        call deallocate()
                    endif
                else
                    call GroupRemoveUnit(g, me)
                    set me = null
                    call deallocate()
                endif
                set this = this.next
            endloop
        endmethod
        //! runtextmacro MA_alloc("onExpire","INTERVAL")
        static method create takes real x1, real y1, unit knocked returns thistype
            local thistype this = thistype.allocate()
            local real a
            set me = knocked
            set x = GetUnitX(me)
            set y = GetUnitY(me)
            set a = Atan3(x1,y1,x,y)
            set xOff = Cos(a)
            set yOff = Sin(a)
            set f = KNOCK_FORCE
            call GroupAddUnit(g, me)
            return this
        endmethod
    endstruct
    private struct Struct extends array
        real dmg
        unit caster
        player owner
        real xOff
        real range
        real yOff
        real dmgDealt
        real x
        real y
        timer lifespan
        unit dummy
        effect ef
        //! runtextmacro MA()
        private method destroy takes nothing returns nothing
            local texttag tt = CreateTextTag()
            call SetTextTagPos(tt, GetUnitX(caster), GetUnitY(caster), TT_Z_OFFSET)
            call SetTextTagText(tt, TT_C+"+"+I2S(R2I(dmgDealt)), TT_HEIGHT)
            //call SetTextTagAge(tt, TT_AGE)
            call SetTextTagLifespan(tt, TT_LIFESPAN)
            call SetTextTagPermanent(tt, false)
            call SetTextTagFadepoint(tt, TT_FADEPOINT)
            call SetTextTagVisibility(tt, owner==GetLocalPlayer())
            call SetTextTagVelocity(tt, TT_X_VEL, TT_Y_VEL)
            set tt = null
            set caster = null
            call DestroyEffect(ef)
            set ef = null
            call RemoveUnit(dummy)
            set dummy = null
            set owner = null
            call ReleaseTimer(lifespan)
            set lifespan = null
            call deallocate()
        endmethod
        static method endOfLifespan takes nothing returns nothing
            call thistype(GetTimerData(GetExpiredTimer())).destroy()
        endmethod
        private static group g = CreateGroup()
        private static unit U
        private static thistype S
        private static method filter takes nothing returns boolean
            local thistype this = S
            set U = GetFilterUnit()
            //! runtextmacro Filter()
        endmethod
        private static method onExpire takes nothing returns nothing
            local thistype this = thistype(0).next
            local unit FoG
            local real r = 0
            local real r2
            //local unit slower
            loop
                exitwhen this == 0
                if UnitAlive(caster) then
                    set x = x + xOff
                    set y = y + yOff
                    call SetUnitX(dummy, x)
                    call SetUnitY(dummy, y)
                    set S = this
                    call GroupEnumUnitsInRange(g, x, y, range, Filter(function thistype.filter))
                    loop
                        set FoG = FirstOfGroup(g)
                        exitwhen FoG == null
                        if not IsUnitInGroup(FoG, Push.g) then
                            call Push.create(x,y,FoG)
                            set r2 = GetUnitState(FoG, UNIT_STATE_MANA) - dmg
                            if r2 < 0 then
                                call SetUnitState(FoG, UNIT_STATE_MANA, 0)
                                set r = r + dmg + r2
                            else
                                call SetUnitState(FoG, UNIT_STATE_MANA, r2)
                                set r = r + dmg
                            endif
                            //set slower = CreateUnit(owner, U_DUMMY, x, y, 9)
                            //call IssueTargetOrder(slower, "slow", FoG)
                            //call UnitApplyTimedLife(slower, 'BTLF', 3)
                            call DestroyEffect(AddSpecialEffectTarget(EF_HIT,FoG,EF_HIT_ATTACH))
                            call GroupRemoveUnit(g, FoG)
                        endif
                    endloop
                    call SetUnitState(caster, UNIT_STATE_MANA, RMinBJ(GetUnitState(caster, UNIT_STATE_MANA)+r,GetUnitState(caster,UNIT_STATE_MAX_MANA)))
                    set dmgDealt = dmgDealt + r
                    //set slower = null
                else
                    call destroy()
                endif
                set this = this.next
            endloop
        endmethod
        //! runtextmacro MA_alloc("onExpire","INTERVAL")
    endstruct
    private function OnCast takes nothing returns boolean
        local Struct s
        local integer level
        local real spd
        local real a
        if GetSpellAbilityId() == A_SPELL then
            set s = Struct.allocate()
            set s.caster = GetTriggerUnit()
            set level = GetUnitAbilityLevel(s.caster, A_SPELL)
            set s.dmg = GetDamage(level)
            set spd = GetMissileSpeed(level)
            set s.x = GetUnitX(s.caster)
            set s.y = GetUnitY(s.caster)
            set a = Atan3(s.x,s.y,GetSpellTargetX(),GetSpellTargetY())
            set s.xOff = spd * Cos(a)
            set s.yOff = spd * Sin(a)
            set s.dmgDealt = 0
            set s.owner = GetOwningPlayer(s.caster)
            set s.dummy = CreateUnit(P_EFFECT, U_DUMMY, s.x, s.y, a*bj_RADTODEG)
            if UnitAddAbility(s.dummy, A_FLY) then
                call UnitRemoveAbility(s.dummy, A_FLY)
            endif
            call SetUnitFlyHeight(s.dummy, DUMMY_HEIGHT, 0)
            set s.range = GetAoE(level)
            set s.ef = AddSpecialEffectTarget(EF_WAVE, s.dummy, "origin")
            set s.lifespan = NewTimer()
            call TimerStart(s.lifespan, ACC_DURATION, false, function Struct.endOfLifespan)
            call SetTimerData(s.lifespan, s)
        endif
        return false
    endfunction
    private function init takes nothing returns nothing
        local trigger t = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t, Condition(function OnCast))
        set t = null
    endfunction
endscope
v1.0.0
-First release
-Doesn't include slow, as I couldn't get it working (I've included the slow feature as commented though, if you get it to work with some ability feel free to notify me about it)
-No draining mana, will update next week
v1.0.1
-It'll drain mana now
v1.0.2
-Added text tag at the spell end


Requires:
http://www.wc3c.net/showthread.php?t=101322
http://www.wc3c.net/showthread.php?t=103862
JASS:
//! textmacro MA
    thistype next
    thistype prev
    static timer clock = CreateTimer()
    static integer count = 0
    method deallocate takes nothing returns nothing
        if this.next != 0 then
            set this.next.prev = this.prev
        endif
        set this.prev.next = this.next
        set this.prev = thistype(0).prev
        set thistype(0).prev = this
        if thistype(0).next == 0 then
            call PauseTimer(clock)
        endif
    endmethod
//! endtextmacro
//! textmacro MA_alloc takes LOOPMETHOD, INTERVAL
    static method allocate takes nothing returns thistype
        local thistype this
        if thistype(0).prev == 0 then
            set count = count + 1
            set this = count
        else
            set this = thistype(0).prev
            set thistype(0).prev = thistype(0).prev.prev
        endif
        if thistype(0).next == 0 then
            call TimerStart(clock, $INTERVAL$, true, function thistype.$LOOPMETHOD$)
        else
            set thistype(0).next.prev = this
        endif
        set this.next = thistype(0).next
        set thistype(0).next = this
        set this.prev = thistype(0)
        return this
    endmethod
//! endtextmacro
//! novjass
        // example of loop:
    local thistype this = thistype(0).next
    loop
        exitwhen this == 0
        ...
        set this = this.next
    endloop
//! endnovjass
If it doesn't work, feel free to ask for help here :)

If you face performance issues, please inform about it here.

And notice that I might update the spell during the oncoming weeks.
 
Last edited by a moderator:
Status
Not open for further replies.
Top