wc3campaigns
WC3C Homepage - www.wc3c.netUser Control Panel (Requires Log-In)Engage in discussions with other users and join contests in the WC3C forums!Read one of our many tutorials, ranging in difficulty from beginner to advanced!Show off your artistic talents in the WC3C Gallery!Download quality models, textures, spells (vJASS/JASS), systems, and scripts!Download maps that have passed through our rigorous approval process!

Go Back   Wc3C.net > Warcraft III Modding > Developer's Corner > Triggers & Scripts
User Name
Password
Register Rules Get Hosted! Chat Pastebin FAQ and Rules Members List Calendar



Reply
 
Thread Tools Search this Thread
Old 11-09-2009, 08:47 PM   #916
Pyrogasm
Lackadaisically Absent.
 
Pyrogasm's Avatar


Respected User
 
Join Date: Sep 2006
Posts: 4,523

Submissions (9)

Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)

Hero Contest - Fourth place

Send a message via ICQ to Pyrogasm Send a message via AIM to Pyrogasm Send a message via MSN to Pyrogasm Send a message via Yahoo to Pyrogasm
Default

For the sake of consistency, it'd be cool if you could get someone to update the first post when you make new spells.

Or, failing that, make a thread in the pastebin that you can update yourself and link to that on the first post of this thread.
__________________
Quote:
Originally posted by Rising_Dusk
Your spells are mostly ignored because they are not very cool so we aren't very excited to review/approve them, but you are incredibly persistent and won't give us an excuse to graveyard it. That is generally what results in a resource being ignored for a long time.

The Spell Request ThreadDone for, unless someone else wants to revive it...
It lasted a damn long time.

Please; Ask for Help Appropriately














Quote:
Originally posted by Kyrbi0
Huh. Almost makes me wish I had a girlfriend, to take advantage of today (wait, no, that's not what I meant... I mean, take advantage of the fact that it is international women's day... gah, never mind).
Quote:
Originally posted by Pyrogasm
Rome may not have been built in a day, but the Romans sure as hell didn't say "look at this great city we built guys!" when they had nothing more than a bit of stone and some cottages.
Pyrogasm is offline   Reply With Quote
Sponsored Links - Login to hide this ad!
Old 11-10-2009, 01:33 AM   #917
Zerzax
Zerzy
 
Zerzax's Avatar
 
Join Date: Mar 2008
Posts: 708

Submissions (2)

Zerzax is a jewel in the rough (192)Zerzax is a jewel in the rough (192)Zerzax is a jewel in the rough (192)

2008 Spell olympics - Fire - SilverSpell Making Session 13 WinnerSpell Making Session 12 Winner

Send a message via AIM to Zerzax Send a message via MSN to Zerzax
Default

Hmm, okay, might do the pastebin thing this weekend. Not many requests will pass through in the next few months so its not essential atm. The thread should be kept open though.
__________________
Some Quotes of Worthy Wisdom:

1. Die - D2 Barbarian
2. Time to Die - D2 Barbarian
3. Too Much Baggage! - D1 Warrior
4. I Gotta Pawn Some of This Stuff! - D1 Warrior
Zerzax is offline   Reply With Quote
Old 11-23-2009, 02:00 AM   #918
Newuser
User
 
Join Date: Sep 2008
Posts: 25

Newuser has little to show at this moment (8)

Default

Not sure if this is the right place to post, didn't want to create a thread just for this.

Basically, I am trying to make a trigger that replicates immolation/Phoenix Fire, it deals damage every second to nearby enemy units(near a unit with an item)

The reason why I am making a trigger instead of just using custom immolation or phoenix fire is because I want it the damage to stack with other units(immolation and phoenix fire does not stack, even if you change the buffs).

I made a trigger which with a periodic timer of 1 second(runs every 1 second).

What it should do is that it checks the entire map for units with an Item.

If the unit has the item, the trigger should cause nearby enemy units(of the unit wearing the item) to take damage.

The problem is, it doesn't seem to work.

For the trigger, I used two unit groups. One unit group is for units with the item. The second unit group is for enemy units that should take damage.

I used loops instead of ForGroups.

Here's the trigger:
Collapse JASS:
scope BlazingArmor initializer InitBlazeArmor

private function BlazeGroupConditions takes nothing returns boolean // Group Conditions
    return ( UnitHasItemOfTypeBJ(GetFilterUnit(), 'I004') == true )
endfunction

private function DamageGroupConditions takes nothing returns boolean // Group Conditions
    if ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false ) and ( IsUnitEnemy(GetFilterUnit(), Player(8)) == true ) and ( IsUnitAliveBJ(GetFilterUnit()) == true ) then
        return true
    else
        return false
    endif
endfunction

private function Blaze_Armor_Actions takes nothing returns nothing // Action
    local unit ItemUnit //  is the unit carrying the Blaze Armor
    local unit DamageUnit // is the unit that is taking damage from Blaze Armor
    local group BlazeGroup // This is the group of units carrying Blaze Armor
    local group DamageGroup // This is the group that is getting damaged by Blaze Armor
    local location Point1 // This is the location of SomeUnit2
    set BlazeGroup = GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function BlazeGroupConditions))
    loop
        call RemoveLocation(Point1)
        call DestroyGroup(DamageGroup)
        set ItemUnit = FirstOfGroup(BlazeGroup)
        set Point1 = GetUnitLoc(ItemUnit)
        set DamageGroup = GetUnitsInRangeOfLocMatching(400.00, Point1, Condition(function DamageGroupConditions))
        exitwhen ItemUnit == null
            //Do stuff
            loop
                set DamageUnit = FirstOfGroup(DamageGroup)
                exitwhen DamageUnit == null
                //Do Stuff
                call UnitDamageTargetEx(ItemUnit, DamageUnit, 50.00, ATTACK_TYPE_HERO, DAMAGE_TYPE_EXTRA, false) // False ignores armor
                call AddSpecialEffectTargetUnitBJ( "head", DamageUnit, "Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl" )
                call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                call GroupRemoveUnit(DamageGroup, DamageUnit)
            endloop
        call GroupRemoveUnit(BlazeGroup, ItemUnit)
    endloop
    call RemoveLocation(Point1)
    call DestroyGroup(BlazeGroup)
    call DestroyGroup(DamageGroup)
    set ItemUnit = null
    set DamageUnit = null
    set BlazeGroup = null
    set DamageGroup = null
    set Point1 = null
endfunction

//===========================================================================
function InitBlazeArmor takes nothing returns nothing
    set gg_trg_Blazing_Armor = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Blazing_Armor, 1.00 )
    call TriggerAddAction( gg_trg_Blazing_Armor, function Blaze_Armor_Actions )
endfunction
endscope

Last edited by Newuser : 11-23-2009 at 02:02 AM.
Newuser is offline   Reply With Quote
Old 11-23-2009, 04:41 AM   #919
Pyrogasm
Lackadaisically Absent.
 
Pyrogasm's Avatar


Respected User
 
Join Date: Sep 2006
Posts: 4,523

Submissions (9)

Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)

Hero Contest - Fourth place

Send a message via ICQ to Pyrogasm Send a message via AIM to Pyrogasm Send a message via MSN to Pyrogasm Send a message via Yahoo to Pyrogasm
Default

Alright, you've summoned me out of my Calculus-II studying lair to answer this because I do still get notifications from this thread.

First off, most of what you've written looks like badly-optimized GUI-conversion JASS. Mostly because of the abundant use of BJs, but also due to your use of locations, stupid if-statements, and an absence of vJASS.

So, here's where we start (from scratch): We need some structure for this code:
Collapse JASS:
scope BlazeArmor initializer Init
    globals
        //Globals go here
    endglobals


    private function HasItemFilter takes nothing returns boolean
        //This function will filter out the units that have Blaze Armor
    endfunction

    private function DamageFilter takes nothing returns boolean
        //This function filters out the units to be damaged
    endfunction

    private function PeriodicActions takes nothing returns nothing
        //This is the meat of the script; it will deal damage to all units around units with Blaze Armor
    endfunction

    private function Init takes nothing returns nothing
        //This does our initialization stuff
    endfunction
endscope

Whoo! That looks cleaner. Alright, now let's start adding some stuff that actually does what we want:
Collapse JASS:
scope BlazeArmor initializer Init
    globals
        //Globals go here
    endglobals


    private function HasItemFilter takes nothing returns boolean
        return ( UnitHasItemOfTypeBJ(GetFilterUnit(), 'I004') == true )
    endfunction

    private function DamageFilter takes nothing returns boolean
        if ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false ) and ( IsUnitEnemy(GetFilterUnit(), Player(8)) == true ) and ( IsUnitAliveBJ(GetFilterUnit()) == true ) then
            return true
        else
            return false
        endif
    endfunction

    private function PeriodicActions takes nothing returns nothing
        local unit ItemUnit //  is the unit carrying the Blaze Armor
         local unit DamageUnit // is the unit that is taking damage from Blaze Armor
         local group BlazeGroup // This is the group of units carrying Blaze Armor
         local group DamageGroup // This is the group that is getting damaged by Blaze Armor
         local location Point1 // This is the location of SomeUnit2
        set BlazeGroup = GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function BlazeGroupConditions))
        loop
            call RemoveLocation(Point1)
            call DestroyGroup(DamageGroup)
            set ItemUnit = FirstOfGroup(BlazeGroup)
             set Point1 = GetUnitLoc(ItemUnit)
            set DamageGroup = GetUnitsInRangeOfLocMatching(400.00, Point1, Condition(function DamageGroupConditions))
            exitwhen ItemUnit == null
                //Do stuff
                loop
                    set DamageUnit = FirstOfGroup(DamageGroup)
                     exitwhen DamageUnit == null
                    //Do Stuff
                    call UnitDamageTargetEx(ItemUnit, DamageUnit, 50.00, ATTACK_TYPE_HERO, DAMAGE_TYPE_EXTRA, false) // False ignores armor
                    call AddSpecialEffectTargetUnitBJ( "head", DamageUnit, "Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl" )
                    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                    call GroupRemoveUnit(DamageGroup, DamageUnit)
                endloop
            call GroupRemoveUnit(BlazeGroup, ItemUnit)
        endloop
        call RemoveLocation(Point1)
        call DestroyGroup(BlazeGroup)
        call DestroyGroup(DamageGroup)
        set ItemUnit = null
        set DamageUnit = null
        set BlazeGroup = null
        set DamageGroup = null
        set Point1 = null
    endfunction

    private function Init takes nothing returns nothing
        set gg_trg_Blazing_Armor = CreateTrigger(  )
        call TriggerRegisterTimerEventPeriodic( gg_trg_Blazing_Armor, 1.00 )
        call TriggerAddAction( gg_trg_Blazing_Armor, function Blaze_Armor_Actions )
    endfunction
endscope

Alright, now the first two functions are very easy to clean up, so let's do that. We can remove unnecessary parenthesis (because they don't affect the code in this case), replace BJs (for efficiency and clarity reasons), get rid of some boolean comparisons (because making sure something is true is the same thing as making sure true == true), and consolidate our return statement.
Collapse JASS:
    globals
        private constant integer ITEM_ID = 'I004'
    endglobals

    private function HasItemFilter takes nothing returns boolean
        return UnitHasItemOfType(GetFilterUnit(), ITEM_ID)
    endfunction

    private function DamageFilter takes nothing returns boolean
        return not(IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)) and IsUnitEnemy(GetFilterUnit(), Player(8)) and IsUnitAliveBJ(GetFilterUnit())
    endfunction
Notice how I took out the Rawcode for the item and made it into a constant, so it's easy to change later on in case you need to use a different rawcode. The only thing that's wonky with this now is the use of GetFilterUnit() and the comparison IsUnitAliveBJ(). The latter function is not reliable for checking to see if a unit is alive; instead, you should check to see that the unit's life is > 0.405. Additionally, we can save some function calls by using a variable for GetFilterUnit() and the output of the function:
Collapse JASS:
    private function DamageFilter takes nothing returns boolean
        local unit F = GetFilterUnit()
        local boolean B = not(IsUnitType(F, UNIT_TYPE_STRUCTURE)) and IsUnitEnemy(F, Player(8)) and GetWidgetLife(F) > 0.405
        set F = null
        return B
    endfunction

Okay, so that's cleared up. Let's look at the main function:
Collapse JASS:
    private function PeriodicActions takes nothing returns nothing
         local unit ItemUnit //  is the unit carrying the Blaze Armor
         local unit DamageUnit // is the unit that is taking damage from Blaze Armor
         local group BlazeGroup // This is the group of units carrying Blaze Armor
         local group DamageGroup // This is the group that is getting damaged by Blaze Armor
         local location Point1 // This is the location of SomeUnit2
        set BlazeGroup = GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function BlazeGroupConditions))
        loop
            call RemoveLocation(Point1)
            call DestroyGroup(DamageGroup)
            set ItemUnit = FirstOfGroup(BlazeGroup)
            set Point1 = GetUnitLoc(ItemUnit)
            set DamageGroup = GetUnitsInRangeOfLocMatching(400.00, Point1, Condition(function DamageGroupConditions))
            exitwhen ItemUnit == null
                //Do stuff
                loop
                    set DamageUnit = FirstOfGroup(DamageGroup)
                     exitwhen DamageUnit == null
                    //Do Stuff
                    call UnitDamageTargetEx(ItemUnit, DamageUnit, 50.00, ATTACK_TYPE_HERO, DAMAGE_TYPE_EXTRA, false) // False ignores armor
                    call AddSpecialEffectTargetUnitBJ( "head", DamageUnit, "Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl" )
                    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                    call GroupRemoveUnit(DamageGroup, DamageUnit)
                endloop
            call GroupRemoveUnit(BlazeGroup, ItemUnit)
        endloop
        call RemoveLocation(Point1)
        call DestroyGroup(BlazeGroup)
        call DestroyGroup(DamageGroup)
        set ItemUnit = null
        set DamageUnit = null
        set BlazeGroup = null
        set DamageGroup = null
        set Point1 = null
    endfunction
Everything red is either bad or a consequence of something that's bad. Fun, eh? Well, here's what's up:
  • JASS is not exactly the most efficient of languages, so improvements are always good. Instead of using/allocating two new groups each iteration, let's just use two global groups that we contain within the scope. This might seem like a useless improvement until you realize that when you use non-BJ GroupEnum functions, the functions don't return a group but instead add units to a previously created group.
  • Once again, we like to improve our code, so we can do that by deprecating locations in favor of x/y coordinates. Most native functions take coordinates anyway, so this goes hand-in hand with removing the BJ calls.
  • In your damage call (what library supplies the EX function anyway, BTW?) and special effects, you can take some of those values out and turn them into constants so that they may be easily modified later.
  • Regarding the special effects, we have a cool trick that involves destroying the effect and creating it in the same line: call DestroyEffect(AddSpecialEffect(...))
So, let's see how I'd write the function:
Collapse JASS:
globals
        private constant integer ITEM_ID = 'I004'
        private constant real DAMAGE = 50.00
        private constant real RANGE = 400.00
        private constant string EFFECT = "Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl"
        private constant string EFFECT_ATTACH = "head"

        private group BlazeGroup = CreateGroup()
        private group DamageGroup = CreateGroup()
    endglobals

    private function PeriodicActions takes nothing returns nothing
        local unit ItemUnit //  is the unit carrying the Blaze Armor
        local unit DamageUnit // is the unit that is taking damage from Blaze Armor
        local real X
        local real Y

        call GroupEnumUnitsInRect(BlazeGroup, bj_mapInitialPlayableArea, Condition(function HasItemFilter))

        loop
            set ItemUnit = FirstOfGroup(BlazeGroup)
            exitwhen ItemUnit == null

            set X = GetUnitX(ItemUnit)
            set Y = GetUnitY(ItemUnit)
            call GroupEnumUnitsInRange(DamageGroup, X, Y, RANGE, Condition(function DamageFilter))

            loop
                set DamageUnit = FirstOfGroup(DamageGroup)
                exitwhen DamageUnit == null

                call UnitDamageTargetEx(ItemUnit, DamageUnit, DAMAGE, ATTACK_TYPE_HERO, DAMAGE_TYPE_EXTRA, false) // False ignores armor
                call DestroyEffect(AddSpecialEffectTarget(EFFECT, DamageUnit, EFFECT_ATTACH)
                call GroupRemoveUnit(DamageGroup, DamageUnit)
            endloop

            call GroupClear(DamageGroup)
            call GroupRemoveUnit(BlazeGroup, ItemUnit)
        endloop

        call GroupClear(BlazeGroup)
        set ItemUnit = null
    endfunction

The final thing to fix is the way you're running the main function periodically. There's no reason to do it with a trigger, so let's just use a timer instead. Doing that and putting it all together gives you this, which (barring any extraneous typing errors or my own failure at functions) ought to work just fine:
Collapse JASS:
scope BlazeArmor initializer Init
    globals
        private constant integer ITEM_ID = 'I004'
        private constant real DAMAGE = 50.00
        private constant real RANGE = 400.00
        private constant string EFFECT = "Abilities\\Spells\\NightElf\\Immolation\\ImmolationDamage.mdl"
        private constant string EFFECT_ATTACH = "head"
        private constant real PERIOD = 1.00

        private group BlazeGroup = CreateGroup()
        private group DamageGroup = CreateGroup()
    endglobals


    private function HasItemFilter takes nothing returns boolean
        return UnitHasItemOfType(GetFilterUnit(), ITEM_ID)
    endfunction

    private function DamageFilter takes nothing returns boolean
        local unit F = GetFilterUnit()
        local boolean B = not(IsUnitType(F, UNIT_TYPE_STRUCTURE)) and IsUnitEnemy(F, Player(8)) and GetWidgetLife(F) > 0.405
        set F = null
        return B
    endfunction

    private function PeriodicActions takes nothing returns nothing
        local unit ItemUnit //  is the unit carrying the Blaze Armor
        local unit DamageUnit // is the unit that is taking damage from Blaze Armor
        local real X
        local real Y

        call GroupEnumUnitsInRect(BlazeGroup, bj_mapInitialPlayableArea, Condition(function HasItemFilter))

        loop
            set ItemUnit = FirstOfGroup(BlazeGroup)
            exitwhen ItemUnit == null

            set X = GetUnitX(ItemUnit)
            set Y = GetUnitY(ItemUnit)
            call GroupEnumUnitsInRange(DamageGroup, X, Y, RANGE, Condition(function DamageFilter))

            loop
                set DamageUnit = FirstOfGroup(DamageGroup)
                exitwhen DamageUnit == null

                call UnitDamageTargetEx(ItemUnit, DamageUnit, DAMAGE, ATTACK_TYPE_HERO, DAMAGE_TYPE_EXTRA, false) // False ignores armor
                call DestroyEffect(AddSpecialEffectTarget(EFFECT, DamageUnit, EFFECT_ATTACH)
                call GroupRemoveUnit(DamageGroup, DamageUnit)
            endloop

            call GroupClear(DamageGroup)
            call GroupRemoveUnit(BlazeGroup, ItemUnit)
        endloop

        call GroupClear(BlazeGroup)
        set ItemUnit = null
    endfunction

    private function Init takes nothing returns nothing
        local timer T = CreateTimer()
        call TimerStart(T, PERIOD, true, function PeriodicActions)
    endfunction
endscope

BAM.
__________________
Quote:
Originally posted by Rising_Dusk
Your spells are mostly ignored because they are not very cool so we aren't very excited to review/approve them, but you are incredibly persistent and won't give us an excuse to graveyard it. That is generally what results in a resource being ignored for a long time.

The Spell Request ThreadDone for, unless someone else wants to revive it...
It lasted a damn long time.

Please; Ask for Help Appropriately














Quote:
Originally posted by Kyrbi0
Huh. Almost makes me wish I had a girlfriend, to take advantage of today (wait, no, that's not what I meant... I mean, take advantage of the fact that it is international women's day... gah, never mind).
Quote:
Originally posted by Pyrogasm
Rome may not have been built in a day, but the Romans sure as hell didn't say "look at this great city we built guys!" when they had nothing more than a bit of stone and some cottages.
Pyrogasm is offline   Reply With Quote
Old 11-23-2009, 12:03 PM   #920
Newuser
User
 
Join Date: Sep 2008
Posts: 25

Newuser has little to show at this moment (8)

Default

Thanks for the help, I will try out the new trigger sometime tomorrow or so.
Newuser is offline   Reply With Quote
Old 12-22-2009, 08:51 AM   #921
Draveken
User
 
Join Date: Dec 2009
Posts: 2

Draveken has little to show at this moment (0)

Default

I been noticing special styles of spells and all is there an ability or such that can inflict more damage from behind or possibly one where when your stealthed you deal more damage.... would be great for an assassin style character.

If you want someone with an army of Ideas I can list ya out a ton lol.

If you want to request a spell, please reply to this thread with the following (Do not send us PMs!):
•A name for your spell (Bloodstrike)
•The number of levels you spell should have 3
•What the spell should do Higher damage when Stealthed and chance to do extreme crits when attacking from behind. Or Higher crits when stealthed.
•The tooltip of the spell (else I will just make one up) A skill of the Assassin's, Bloodstrike is known to fell even the stronger of foes if used correctly.
•If you would like the spell in GUI or JASS Either don't care as long as I can import it easily lol.
•If the spell needs to be MUI or not Again dunno I leave that up to you coders.

Last edited by Anitarf : 12-22-2009 at 09:44 AM.
Draveken is offline   Reply With Quote
Old 12-29-2009, 04:51 AM   #922
cosmicat
Probably AFK
 
cosmicat's Avatar
 
Join Date: Feb 2009
Posts: 635

cosmicat will become famous soon enough (71)cosmicat will become famous soon enough (71)cosmicat will become famous soon enough (71)

Default

Er, high damage when Stealthed is Wind Walk, no? Unless you mean the assassin in question has Permanent Invisibility (and deals more damage on the first hit) or Ghost (and deals more damage while the enemy has no stealth detection). Care to clarify?

Anyone see a way to do this without dynamic triggers (damage detection system)? 'Cause I sure don't, and dynamic triggers scare me (rather, the prospect of getting yelled at for using dynamic triggers scares me).

Think you'll be here (on wc3c) a while? If I haven't gotten started on a certain project by February, I'm going to force myself into it, but that's more likely than not going to be what'll happen. And when I do get started on said project, ideas will be in high demand. Yes, this is a clumsy attempt to recruit you. No, I'm not going to retype it because I don't know how else I'd say it.

Also, I'm curious about what Anitarf changed in your post. ;)
__________________
+++++++++++[>++++++>++++++++++>++++++++++<<<-]>+.>+.++++.+>-.----.------.--.<.

Last edited by cosmicat : 12-29-2009 at 04:58 AM.
cosmicat is offline   Reply With Quote
Old 01-13-2010, 07:25 AM   #923
Pyrogasm
Lackadaisically Absent.
 
Pyrogasm's Avatar


Respected User
 
Join Date: Sep 2006
Posts: 4,523

Submissions (9)

Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)

Hero Contest - Fourth place

Send a message via ICQ to Pyrogasm Send a message via AIM to Pyrogasm Send a message via MSN to Pyrogasm Send a message via Yahoo to Pyrogasm
Default

I'd say it was probably extraneous color formatting.

[/endcommentoutoffuckingnowhere]
__________________
Quote:
Originally posted by Rising_Dusk
Your spells are mostly ignored because they are not very cool so we aren't very excited to review/approve them, but you are incredibly persistent and won't give us an excuse to graveyard it. That is generally what results in a resource being ignored for a long time.

The Spell Request ThreadDone for, unless someone else wants to revive it...
It lasted a damn long time.

Please; Ask for Help Appropriately














Quote:
Originally posted by Kyrbi0
Huh. Almost makes me wish I had a girlfriend, to take advantage of today (wait, no, that's not what I meant... I mean, take advantage of the fact that it is international women's day... gah, never mind).
Quote:
Originally posted by Pyrogasm
Rome may not have been built in a day, but the Romans sure as hell didn't say "look at this great city we built guys!" when they had nothing more than a bit of stone and some cottages.
Pyrogasm is offline   Reply With Quote
Old 05-04-2010, 12:32 PM   #924
TheKid
User
 
TheKid's Avatar
 
Join Date: Mar 2009
Posts: 195

TheKid will become famous soon enough (37)TheKid will become famous soon enough (37)

Default

I took Calculus II this semester too, but sadly I didn't do as well as I had hoped and I may need to repeat the course.
__________________
TheKid is offline   Reply With Quote
Old 05-04-2010, 07:06 PM   #925
Matarael
User
 
Matarael's Avatar
 
Join Date: Oct 2006
Posts: 260

Submissions (2)

Matarael will become famous soon enough (49)Matarael will become famous soon enough (49)

Default

I know Pyrogasm left this topic already, but if someone can do this effectively I'd be grateful:

* Cannon Shot (or something, the name doesn't matter)
* 3 would be ok, each would add distance perhaps.
* The idea is that a cannon shot is fired at the direction of the unit. Let's say it's a tank, then where ever the tank is facing at the moment the ability is clicked (it's a targetless ability/spell), a shot is fired into that direction, and the missile can be seen (perhaps with a dummy unit) cruising and damaging the first target it meets (trees, units, etc.). Here's the difficult part: when the unit is firing mode, it shouldn't move, and every mouse click will only rotate the unit into a new direction. If done properly, this ability should be like how a rocket fire ability works on a FPS game: the unit stands still, and whenever the trigger is pressed he fires a missile towards wherever he's facing. Ideally the missiles should expire at a certain range (range is improved with level).
* The tooltip doesn't matter.
* In GUI please so I could see how it works :)
* MUI please.
Matarael is offline   Reply With Quote
Old 05-04-2010, 07:29 PM   #926
TheKid
User
 
TheKid's Avatar
 
Join Date: Mar 2009
Posts: 195

TheKid will become famous soon enough (37)TheKid will become famous soon enough (37)

Default

That is not a spell request.

Though, if you want I can set something up in the editor that shows you how to do it. Do you want to use a projectile system, or are you trying to keep this to dummy units? It would be really easy with a projectile system, and there really isn't any reason not to use one.

If you have other projectiles in your map then you could use the projectiles library for those too, given the example that I will setup for you.

This is all of course if you use vJass. You do, right?
__________________
TheKid is offline   Reply With Quote
Old 05-05-2010, 02:01 PM   #927
Matarael
User
 
Matarael's Avatar
 
Join Date: Oct 2006
Posts: 260

Submissions (2)

Matarael will become famous soon enough (49)Matarael will become famous soon enough (49)

Default

Hi, TheKid. Err, no unfortunately I haven't learned using vJass -_-' I thought of it as a "spell" because the unit would have an attack which is different than this (it would be a close range vulcan gun).

I'm intrigued by your suggestion that it would be a projectile system, and if it's not too much trouble for you I'd like to see how it works.

I'm also wondering what you mean exactly by "having other projectiles in the map". But whatever it is it seems interesting haha...
Matarael is offline   Reply With Quote
Old 05-06-2010, 01:04 AM   #928
Zerzax
Zerzy
 
Zerzax's Avatar
 
Join Date: Mar 2008
Posts: 708

Submissions (2)

Zerzax is a jewel in the rough (192)Zerzax is a jewel in the rough (192)Zerzax is a jewel in the rough (192)

2008 Spell olympics - Fire - SilverSpell Making Session 13 WinnerSpell Making Session 12 Winner

Send a message via AIM to Zerzax Send a message via MSN to Zerzax
Default

I think he means, do you have other locusted dummy units acting as collision missiles in your map? Do you already have something set up for this kind of thing? Coding the projectile could be kind of fun, might be good practice. I would see two ways to code the movement of the projectile:

A parabola that's been parametrized into x(t), and y(t), and z(t) functions, and you can fit "t" into whatever time interval to make it go faster or slower.

Use basic kinematic equations from physics with some fixed acceleration, speed, and projection and facing angles, checking for terrain height and unit flying heights.

The colliding with units could be done in the way Vexorian has it set up in his XE system, an enumeration over an area about twice as large as you want to detect units so that fewer gaps in the area occur at each enumeration.
__________________
Some Quotes of Worthy Wisdom:

1. Die - D2 Barbarian
2. Time to Die - D2 Barbarian
3. Too Much Baggage! - D1 Warrior
4. I Gotta Pawn Some of This Stuff! - D1 Warrior
Zerzax is offline   Reply With Quote
Old 05-07-2010, 08:33 AM   #929
Pyrogasm
Lackadaisically Absent.
 
Pyrogasm's Avatar


Respected User
 
Join Date: Sep 2006
Posts: 4,523

Submissions (9)

Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)Pyrogasm is a splendid one to behold (638)

Hero Contest - Fourth place

Send a message via ICQ to Pyrogasm Send a message via AIM to Pyrogasm Send a message via MSN to Pyrogasm Send a message via Yahoo to Pyrogasm
Default

80% of what you want to do is inherently part of the Fireball spell I made at one point.

...but I'm pretty sure that no longer works in 1.23b+, so you're screwed there.
__________________
Quote:
Originally posted by Rising_Dusk
Your spells are mostly ignored because they are not very cool so we aren't very excited to review/approve them, but you are incredibly persistent and won't give us an excuse to graveyard it. That is generally what results in a resource being ignored for a long time.

The Spell Request ThreadDone for, unless someone else wants to revive it...
It lasted a damn long time.

Please; Ask for Help Appropriately














Quote:
Originally posted by Kyrbi0
Huh. Almost makes me wish I had a girlfriend, to take advantage of today (wait, no, that's not what I meant... I mean, take advantage of the fact that it is international women's day... gah, never mind).
Quote:
Originally posted by Pyrogasm
Rome may not have been built in a day, but the Romans sure as hell didn't say "look at this great city we built guys!" when they had nothing more than a bit of stone and some cottages.
Pyrogasm is offline   Reply With Quote
Old 05-07-2010, 01:25 PM   #930
Godzbreath
User
 
Join Date: May 2010
Posts: 1

Godzbreath has little to show at this moment (0)

Default

Hello, I had a fairly simple request that's been for some reason escaping me. I'm currently recreating a lot of heroes from AoS style maps to adapt them into melee FFA maps (At the request of a friend I play LAN with a lot.) and am struggling with what I would have normally thought to be a fairly simple ability.

We're trying to perfect a hero that specializes in map control and base harassment, and currently we've been trying to think of the most efficient way to create a spell that sets an invisible ward at a target location, with unlimited duration. Per level, you gain an extra ward, so basically you'll have 1/2/3 wards per level. Placing a 4th ward would destroy whichever ward is the oldest. That's all we're after.

Would really appreciate a hand here. I've kind of given up.

Posts merged by a moderator.

Hi. I'm adapting some AoS heroes to FFA melee maps, and need help making a sentry ward spell. This spell is meant to be used on a hero who provides map control and base harassment. (Think a fusion of Blademaster and Far Seer.)

  • Watchful Eye.
  • 3.
  • Place an invisible ward at location for an unlimited duration. Provides sight of surrounding area. 1/2/3 wards per level. Doesn't have to do anything fancy beyond that.
  • Place an invisible ward at location for an unlimited duration. Provides sight of surrounding area. 1/2/3 wards per level.
  • I was using JASS until it went unstable with a recent patch, but JASS will still be fine. (I'll just deal with using default editor to sort it out.)

Thanks. :)

Last edited by Anitarf : 05-08-2010 at 09:19 AM.
Godzbreath is offline   Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off


All times are GMT. The time now is 09:45 PM.


Affiliates
The Hubb The JASS Vault Clan WEnW Campaign Creations Clan CBS GamesModding Flixreel Videos

Powered by vBulletin (Copyright ©2000 - 2019, Jelsoft Enterprises Ltd).
Hosted by www.OICcam.com
IT Support and Services provided by Executive IT Services