• 🏆 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!

Fear v.0,2

Features

Easy to use.
Easy to adjust to your needs.
Quite flexible and user-customizable.
MUI
Fully Commented, line by line.

Tooltip
The Caster makes the target flee in terror, and run out of control for a duration of time.
Level 1 - 15 seconds
Level 2 - 17 seconds
Level 3 - 19 seconds
Level 4 - 21 seconds

If selected, the effect can be canceled with incoming damage.
Level 1 - 250 damage
Level 2 - 300 damage
Level 3 - 350 damage
Level 4 - 400 damage

SoD.GoDLike inspired me in creating a Fear like the one Warlocks have in WoW, and then i noticed there was no similar spell in the hive, so i thought of uploading it here. However that spell is limited only to one target per warlock, a limitation which i didnt agree with for a wc3 spell.

The tricky part of the spell was to make the player controlling the target loose complete control over the unit. Which should be targeted in 3 sections.

- Movement
- Attack
- Spells

- The Movement issue is solved throught a very fast loop, giving a specific order to the unit, it is not physically possible for anyone to be faster than that loop.

- The Attack is Disabled

- As for the spells, well no spell with animation can be done because of the movement loop, however instant spells, like beserk, and items were able to be casted. So i created an order interception trigger.

With the usage of the Interception Trigger, i have avoided the need of Dummies, abilities and units, and have avoided the issue of "Doom", which can only be cast 1 time per target, which some of you suggested.

The Triggers are fully Commented.

I believe i have eradicated all leaks, i left the unit group without destroying it on purpose, because at different times the unit group could have different units in it, there is no specific time i can destroy it without causing the system to malfunction. So i leave it be, and it empties when there are no units affected by fear.

-= If there is a way to deal with this leak without causing a malfunction i am more than glad to do it=-

Final thoughts, are to create a system to make units being less affected by the spell the more times they are being targeted by it for some period of time after they where last affected. Some short of Immunity, but thats a thought that i will try to materialize in the future.

- Feel free to use as you like, and edit it as you like.
- Credit if used.




Update Details
Added Bribe's GUI Unit Indexer as suggested by Magtheridon96.
Removed Dummies/Dummy abilities and Buffs
Added User Customization Functions. You can now choose, if you can target with the spell a target that is already under its effect, and you can choose if you want incoming damage (adjustable) to cancel the effect as Adiktuz suggested.
Eradicated leaks, spotted by Tank-Commander
Added level up effect varations, in duration and in damage (if selected) to cancel limit.
Various Code changes.



To the Triggers!

  • MF Settings
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set MF_EffectAdjustment = Abilities\Spells\Undead\Curse\CurseTarget.mdl
      • Set MF_AllowRepeatedCast = False
      • Set MF_DamageCancelBoolean = True
      • Set MF_FearAbility = Fear
      • Set MF_Damage_Limit = 250.00
      • Set MF_Damage_Limit_UP = 50.00
      • Set MF_Duration = 15
      • Set MF_Duration_Up = 2

MF_EffectAdjustment (String) allows you to choose the special effect you want to use with the usage of its path.
MF_AllowRepeatedCast (Boolean)
=Changing this to "True" will allow you to cast the spell in a unit which is already under its effect, thus refreshing the timer.
=Chaing this to "False" will not allow you to cast the spell in a unit which is already under its effect, thus rendering the unit Immune, and making a message appear.
MF_FearAbility (Ability) This is so the user has to do less work if he choses to use my spell.
MF_Damage_Limit (Real) This is the damage requires the unit to suffer in order to cancel the effect, if selected so.
MF_Damage_Limit_UP (Real) This increases the damage limit, depending on the level of the ability.
MF_Duration (Integer) This is how long the spell will last
MF_Duration_Up (Integer) This is how long the duration will be upgraded depending on the level of the ability.

The Above are for the user to work with. Values he can set to adjust the spell to his needs.

Initial settings: Non-repeatable,Damage-cancelable






  • MF Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to MF_FearAbility
    • Actions
      • -------- Setting the Indexes --------
      • Set MF_Key = (Custom value of (Target unit of ability being cast))
      • Set MF_Target[MF_Key] = (Target unit of ability being cast)
      • Set MF_Caster[MF_Key] = (Triggering unit)
      • -------- Setting the Points --------
      • Set MF_Target_TempLoc[MF_Key] = (Position of MF_Target[MF_Key])
      • Set MF_TargetMoveTo_TempLoc[MF_Key] = (MF_Target_TempLoc[MF_Key] offset by (Random real number between 200.00 and 400.00) towards (Random angle) degrees)
      • -------- Checking wether spell is allowed on the same target multiple times --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MF_AllowRepeatedCast Equal to False
        • Then - Actions
          • -------- If not allowed, then it checks if the target is already affected. --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (MF_Target[MF_Key] is in MF_TargetsGroup) Equal to True
            • Then - Actions
              • -------- If he is already affected, then displays the message "Immune" --------
              • Floating Text - Create floating text that reads Immune above MF_Target[MF_Key] with Z offset 50.00, using font size 10.00, color (80.00%, 0.00%, 100.00%), and 20.00% transparency
              • Floating Text - Change (Last created floating text): Disable permanence
              • Floating Text - Change the lifespan of (Last created floating text) to 0.80 seconds
              • Floating Text - Change the fading age of (Last created floating text) to 0.50 seconds
            • Else - Actions
              • -------- If he is not affected, then does initial settings --------
              • -------- Destruction of Special Effect, so Special Effects Dont Stick arround if they are there from previous cast. --------
              • Special Effect - Destroy MF_SpecialEffect[MF_Key]
              • -------- Adding Target to Targets Group --------
              • Unit Group - Add MF_Target[MF_Key] to MF_TargetsGroup
              • -------- Creating and Setting of Special Effect --------
              • Special Effect - Create a special effect attached to the overhead of MF_Target[MF_Key] using MF_EffectAdjustment
              • Set MF_SpecialEffect[MF_Key] = (Last created special effect)
              • -------- HP Settings for later Check --------
              • Set MF_TargetHPInit[MF_Key] = (Life of MF_Target[MF_Key])
              • -------- Nulling the Tickers --------
              • Set MF_Ticker[MF_Key] = 0
              • Set MF_Ticking[MF_Key] = 0
              • -------- Opens Secondary Triggers --------
              • Trigger - Turn on MF Loop <gen>
              • Trigger - Turn on MF Order Interception NO TARGET <gen>
              • Trigger - Turn on MF Order Interception OBJECT <gen>
        • Else - Actions
          • -------- If allowed, does initial settings. --------
          • -------- Destruction of Special Effect, so Special Effects Dont Stick arround if they are there from previous cast. --------
          • Special Effect - Destroy MF_SpecialEffect[MF_Key]
          • -------- Adding Target to Targets Group --------
          • Unit Group - Add MF_Target[MF_Key] to MF_TargetsGroup
          • -------- Creating and Setting of Special Effect --------
          • Special Effect - Create a special effect attached to the overhead of MF_Target[MF_Key] using MF_EffectAdjustment
          • Set MF_SpecialEffect[MF_Key] = (Last created special effect)
          • -------- HP Settings for later Check --------
          • Set MF_TargetHPInit[MF_Key] = (Life of MF_Target[MF_Key])
          • -------- Nulling the Tickers --------
          • Set MF_Ticker[MF_Key] = 0
          • Set MF_Ticking[MF_Key] = 0
          • -------- Opens Secondary Triggers --------
          • Trigger - Turn on MF Loop <gen>
          • Trigger - Turn on MF Order Interception NO TARGET <gen>
          • Trigger - Turn on MF Order Interception OBJECT <gen>









  • MF Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • -------- Picking every unit affected by the spell --------
      • Unit Group - Pick every unit in MF_TargetsGroup and do (Actions)
        • Loop - Actions
          • -------- Setting their index --------
          • Set MF_Key = (Custom value of (Picked unit))
          • -------- Increasing the Helping Timer --------
          • Set MF_Ticking[MF_Key] = (MF_Ticking[MF_Key] + 1)
          • -------- Checking with the help of Helping Timer, if 1 second has elapsed --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (MF_Ticking[MF_Key] mod 33) Equal to 0
            • Then - Actions
              • -------- If it does, then checks if the Duration Limit is reached. --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • MF_Ticker[MF_Key] Not equal to (MF_Duration + ((MF_Duration_Up x (Level of MF_FearAbility for MF_Caster[MF_Key])) - MF_Duration_Up))
                • Then - Actions
                  • -------- If not then destroyes leaks from previous loops. --------
                  • Custom script: call RemoveLocation(udg_MF_Target_TempLoc[udg_MF_Key])
                  • Custom script: call RemoveLocation(udg_MF_TargetMoveTo_TempLoc[udg_MF_Key])
                  • -------- Sets helping Timer to 0, for his next looping set --------
                  • Set MF_Ticking[MF_Key] = 0
                  • -------- Increases Main timer who is checking the if the Duration is reached --------
                  • Set MF_Ticker[MF_Key] = (MF_Ticker[MF_Key] + 1)
                  • -------- Sets the next random location at which the target is going to move --------
                  • Set MF_Target_TempLoc[MF_Key] = (Position of MF_Target[MF_Key])
                  • Set MF_TargetMoveTo_TempLoc[MF_Key] = (MF_Target_TempLoc[MF_Key] offset by (Random real number between 200.00 and 400.00) towards (Random angle) degrees)
                • Else - Actions
                  • -------- If Duration is met, which ends the effect, the destroyes the last Point unit was ordered to Move to, which is leaking --------
                  • Custom script: call RemoveLocation(udg_MF_Target_TempLoc[udg_MF_Key])
                  • Custom script: call RemoveLocation(udg_MF_TargetMoveTo_TempLoc[udg_MF_Key])
                  • -------- Orders target to Stop, in case the effect ends while he is on route. --------
                  • Unit - Order MF_Target[MF_Key] to Stop
                  • -------- Removes target from Targets Group --------
                  • Unit Group - Remove MF_Target[MF_Key] from MF_TargetsGroup
                  • -------- Special Effect Destruction --------
                  • Special Effect - Destroy MF_SpecialEffect[MF_Key]
                  • -------- Reseting the Timers --------
            • Else - Actions
              • -------- If 1 second hasnt elapsed then proceed below --------
              • -------- This checks if the effect has to be canceled by incoming damage --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • MF_DamageCancelBoolean Equal to True
            • Then - Actions
              • -------- If yes, then compares Current life, with Initial Life --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Life of MF_Target[MF_Key]) Less than (MF_TargetHPInit[MF_Key] - (MF_Damage_Limit + ((MF_Damage_Limit_UP x (Real((Level of MF_FearAbility for MF_Caster[MF_Key])))) - MF_Damage_Limit)))
                • Then - Actions
                  • -------- If damage limit is met then, destroyes last assinged location that leaks --------
                  • Custom script: call RemoveLocation(udg_MF_Target_TempLoc[udg_MF_Key])
                  • Custom script: call RemoveLocation(udg_MF_TargetMoveTo_TempLoc[udg_MF_Key])
                  • -------- Orders unit to stop, in case he was moving towards last assigned point --------
                  • Unit - Order MF_Target[MF_Key] to Stop
                  • -------- Removes unit from the Targets Group --------
                  • Unit Group - Remove MF_Target[MF_Key] from MF_TargetsGroup
                  • -------- Destroyes Special Effects --------
                  • Special Effect - Destroy MF_SpecialEffect[MF_Key]
                  • -------- Resets the Timers --------
                • Else - Actions
                  • -------- If Damage Limit is not met, the proceed Below --------
            • Else - Actions
              • -------- If damage should't be a reason to cancel the effect then proceeds below --------
          • -------- Orders target to move to his assigned location --------
          • Unit - Order MF_Target[MF_Key] to Move To MF_TargetMoveTo_TempLoc[MF_Key]
          • -------- Checks if Targets Group is empty, thus no active targets --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (MF_TargetsGroup is empty) Equal to True
            • Then - Actions
              • -------- If so, then turns off Helping Triggers --------
              • Trigger - Turn off (This trigger)
              • Trigger - Turn off MF Order Interception NO TARGET <gen>
              • Trigger - Turn off MF Order Interception OBJECT <gen>
            • Else - Actions
              • -------- If not repeat --------



  • MF Order Interception
    • Events
      • Unit - A unit Is issued an order with no target
    • Conditions
      • ((Triggering unit) is in MF_TargetsGroup) Equal to True
    • Actions
      • -------- This trigger is my "silence" effect towards instant/no animation spells (and items) --------
      • -------- When the target affected is issued an order with no target, then this trigger immediately orders him to move to his assigned location, this intercepting the previous order --------
      • Set MF_Key = (Custom value of (Triggering unit))
      • Unit - Order (Triggering unit) to Move To MF_TargetMoveTo_TempLoc[MF_Key]

  • MF Order Interception OBJECT
    • Events
      • Unit - A unit Is issued an order targeting an object
    • Conditions
      • ((Triggering unit) is in MF_TargetsGroup) Equal to True
    • Actions
      • -------- Created to Debugg a small bug --------
      • Set MF_Key = (Custom value of (Triggering unit))
      • Unit - Order (Triggering unit) to Move To MF_TargetMoveTo_TempLoc[MF_Key]









Special Thanks
SoD.GoDLike For inspiring me to do the spell and encourage me to upload it.
rulerofiron99 For being a good buddy, and for taking time to help me become better.
claptomanic For showing me a function i did not know.
Tank-Commander For spoting some leaks i missed.
Adiktuz for his suggestions in adding more user customizable functions.
Keywords:
Warcraft 3, WoW, Fear, Maestros, MUI, GUI, Indexing, Arrays
Contents

Just another Warcraft III map (Map)

Reviews
13:51, 7th Sep 2012 Magtheridon96: Approved.
Level 25
Joined
Jul 10, 2006
Messages
3,315
- You should split the testmap initialization and system initialization/config into different triggers.
- Fear ability should be referenced as a variable, and set in a config trigger.
- Duration, by virtue of the time-periodic event, has about a second variance. What I mean is, someone that casts Fear on a unit just before the loop shoots (like 0.01 sec before), will lose an entire second of the spell's effects. Rather loop every 0.25. You can detect when it changes direction with Modulo(TickingClock, 4)==0, this finds the remainder after TickingClock is divided by 4.
- Use Bribe's GUI Unit Indexer for your indexing needs.
- You should use a "general" dummy unit, and add the ability to it. This way, users that want to implement this system into maps that already have a dummy cast only need to create the ability. Set this ability to a variable in the config trigger as well.
- "Loop" is a very general trigger name, add a prefix to all your triggers, e.g. MFS_Loop (for Maestros Fear System).

I like it though, might even use it in one of my maps :)
Stress testing now.

EDIT: Even more reason I think you should loop every 0.25 and add the modulo check; IMO it looks bad when all feared units run around in sync.
I think you should allow casting on the same unit; just have the new caster's fear override the old one.
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
Nice indexing, will count up to 8190 and boom.

Owner of Triggering Unit -> Triggering Player

Dont make 3 different key variables, use one for all of them.

UnitRemoveAbilityBJ? -> UnitRemoveAbility(reverse parameter order)

Dying Unit -> Triggering Unit

And please store it in some kind of variable.

I'm just curious which ability you use to disable an attack (I cannot open any files at the moment).
 
Level 8
Joined
Oct 26, 2008
Messages
387
Nice indexing, will count up to 8190 and boom.


Nice reply, as always that is, i really enjoy seeing them.

68,25 do you know what that is? That is the exact ammount of time, it will take a human being, to cast the spell so many times (based on the spells cooldown) I am sorry i didnt take in mind some peoples unrealistic and unreasonable logic. Why blame me for an array being able to store only that much? It was designed based on REALISTIC scenarios, not your personal fantasy.



Owner of Triggering Unit -> Triggering Player

Is there a functionality problem? Is it not working?

Dont make 3 different key variables, use one for all of them.

And array it you mean? I could do that.

UnitRemoveAbilityBJ? -> UnitRemoveAbility(reverse parameter order)

Sorry, I dont know about jass, when i had it the way you said, it bugged, so i made a new trigger, made the like unit - remove ability, convert it to custom text and copied it in the custom script, and it worked fine.

Dying Unit -> Triggering Unit

Again, so? Is it not working?

And please store it in some kind of variable.

The unit? Please be more specific.

I'm just curious which ability you use to disable an attack (I cannot open any files at the moment).

I dont know, someone suggested it, and it worked.


Doom only silences no? Disable attack is a whole other spell (like drunken master Drunken Haze).

Yes Doom only silences, and prevents item casting.
 
Last edited:
Level 25
Joined
Jul 10, 2006
Messages
3,315
Please don't get so defensive; those are the rules for having your submission accepted.

68,25 do you know what that is? That is the exact ammount of time, it will take a human being, to cast the spell so many times (based on the spells cooldown) I am sorry i didnt take in mind some peoples unrealistic and unreasonable logic. Why blame me for an array being able to store only that much? It was designed based on REALISTIC scenarios, not your personal fantasy.
If I include this in my map, Region, it could realistically reach that limit. The spell can be used for units, and many, possibly computer-controlled units at that.

You could also prevent attack/spellcasting by intercepting the order.
 
Level 8
Joined
Oct 26, 2008
Messages
387
Please don't get so defensive; those are the rules for having your submission accepted.

I am sorry, if someone wants me to take him seriously he has to be as serious as you are, not coming arround and showing off and being ironic.

If I include this in my map, Region, it could realistically reach that limit. The spell can be used for units, and many, possibly computer-controlled units at that.

That limit is minutes. Is the ammount of minutes it would take if all you did was spam the spell. You say that in your map, if you add this spell, there is a chance the spell would be cast 8000 + times?

You could also prevent attack/spellcasting by intercepting the order.

How to do that :D?

- You should split the testmap initialization and system initialization/config into different triggers.

No problem

- Fear ability should be referenced as a variable, and set in a config trigger.

Sure, but why?

- Duration, by virtue of the time-periodic event, has about a second variance.

Duration = 15, time-periodic loops every second, how does that variance manifests?

What I mean is, someone that casts Fear on a unit just before the loop shoots

Well, i am guessing you mean when someone casts Fear, for second and third ... N times after the loop was opened?

(like 0.01 sec before), will lose an entire second of the spell's effects. Rather loop every 0.25. You can detect when it changes direction with Modulo(TickingClock, 4)==0, this finds the remainder after TickingClock is divided by 4.

What is Modulo :S? I am guessing its a math term, but i dont know this one (in English at least)


- Use Bribe's GUI Unit Indexer for your indexing needs.

I dont want to.

- You should use a "general" dummy unit, and add the ability to it. This way, users that want to implement this system into maps that already have a dummy cast only need to create the ability. Set this ability to a variable in the config trigger as well.

How do i do this? "general" dummy, you confused me.


- "Loop" is a very general trigger name, add a prefix to all your triggers, e.g. MFS_Loop (for Maestros Fear System).

If only, the biggest issue.

I like it though, might even use it in one of my maps :)
Stress testing now.

EDIT: Even more reason I think you should loop every 0.25 and add the modulo check; IMO it looks bad when all feared units run around in sync.
I think you should allow casting on the same unit; just have the new caster's fear override the old one.

Yeah that would look bad, but remember that in a real enviroment, the spell wouldnt have a 0,5 cooldown.. this is just for showing the MUI nature.
Also, i dont want the new fear to override the old one. :p If you want you can simply delete the condition in the initiation trigger i guess.

Thanks for your constructive answers.
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
It's not all about counting you know. And I am serious so you better stop act like you know something, fucking ridiculous when you try to help people and they respond like shit - think I should quit modding again, THW is not as it used to be.

Basic those arrows are what you should replace your actions with. They're all BJs that's why you replace them and you should cache the unit as JASS is fucking slow to call functions over and over again.

Anyway report me if you want, I don't really give a damn fuck anymore. Judge this contest and I'm out.
 
Level 8
Joined
Oct 26, 2008
Messages
387
It's not all about counting you know. And I am serious so you better stop act like you know something, fucking ridiculous when you try to help people and they respond like shit - think I should quit modding again, THW is not as it used to be.

Basic those arrows are what you should replace your actions with. They're all BJs that's why you replace them and you should cache the unit as JASS is fucking slow to call functions over and over again.

Anyway report me if you want, I don't really give a damn fuck anymore. Judge this contest and I'm out.

Damn straight. Once upon a time you would try to make something and people would say something nice instead of being ironic just because they know more.
Everytime i see posts of you, you speak to people in an ill-mannered way.
I dont know everything, in fact, the things i do not know are enough to fill libraries. But i cant stand having people who know more than me, showing off instead of helping. Report you why? Jesus, what are we? 12 year olds?

fucking ridiculous when you try to help people and they respond like shit
Well maybe, if i am not the first one to respond like this, maybe, you should consider that what makes people respond like this is your behaviour. Why havent i responded to rulerofiron99 like this? Compare your replies, and compare my replies to both of you.
See the differences.
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
Let's put it this way. You are the only one responding like that as far as I know, been here for approx a month now.

And no I was not ironic, spell is really fucked when you reach topindex. Ill-mannered way you say? Opinions are like assholes, everyone has one.

Showing-off? When? Sorry if you think my way of helping people, telling what they did wrong and what they should improve - nothing inbetween that's it. Not necessary to be even worse "your spell is nice buuut fix this that and thiss + rep anyway".
 
Level 8
Joined
Oct 26, 2008
Messages
387
Let's put it this way. You are the only one responding like that as far as I know, been here for approx a month now.

And no I was not ironic, spell is really fucked when you reach topindex. Ill-mannered way you say? Opinions are like assholes, everyone has one.

Showing-off? When? Sorry if you think my way of helping people, telling what they did wrong and what they should improve - nothing inbetween that's it. Not necessary to be even worse "your spell is nice buuut fix this that and thiss + rep anyway".

Okay, lets see this through.


Nice indexing, will count up to 8190 and boom.

(where i come from, saying that something is "Nice" when in fact you believe its not, is called I R O N Y
(And ofc i replied in the same manner, I R O N I C L Y, simply because i cant stand it as mentioned before.)


Nice reply, as always that is, i really enjoy seeing them.

68,25 do you know what that is? That is the exact ammount of time, it will take a human being, to cast the spell so many times (based on the spells cooldown) I am sorry i didnt take in mind some peoples unrealistic and unreasonable logic. Why blame me for an array being able to store only that much? It was designed based on REALISTIC scenarios, not your personal fantasy.



Owner of Triggering Unit -> Triggering Player

Is there a functionality problem? Is it not working?

Where is your problem here? Did my question offend you?


Dont make 3 different key variables, use one for all of them.

And array it you mean? I could do that.

Same as above

UnitRemoveAbilityBJ? -> UnitRemoveAbility(reverse parameter order)

Sorry, I dont know about jass, when i had it the way you said, it bugged, so i made a new trigger, made the like unit - remove ability, convert it to custom text and copied it in the custom script, and it worked fine.

I simply explained what happened with that BJ thing which i still dont know and dont understand what it is.

Dying Unit -> Triggering Unit

Again, so? Is it not working?

Same as before.

And please store it in some kind of variable.

The unit? Please be more specific.

Same

I'm just curious which ability you use to disable an attack (I cannot open any files at the moment).

I dont know, someone suggested it, and it worked.

???

So what did offend you so much? My irony on your irony? Or the fact that i was ironic to the other guy who after 4 replies he decided to take a look at the triggers?
If you do NOT want to post a constructive answer saying whats good, whats bad, then DONT bother. I can appreciate VERY much when people say,
"This this this this this and this are good"
"this this this this this is wrong/bad for this this this this and this reasons"
Is that hard for you to understand? No i dont appreciate people who know more and have better understanding to come and be ironic and say things like,

thats wrong, use this, do that, do the other.

You want to say use that instead of this? Then say why that is better than this. Else silence.
 
Level 25
Joined
Jul 10, 2006
Messages
3,315
Well maybe, if i am not the first one to respond like this, maybe, you should consider that what makes people respond like this is your behaviour. Why havent i responded to rulerofiron99 like this? Compare your replies, and compare my replies to both of you.
See the differences.

Still no reason to respond the way you did :/

Even if you believe someone is being rude - which I don't believe baassee was - you shouldn't start flaming them immediately.
 
If you don't want to be helped, then don't even think about uploading a public resource... We're all just trying to be helpful here...

We don't really care if you follow the suggestions we give [because they are suggestions], but at the very least realize that they are all meant to help you become better in this field... I think the reason why he did not explain it any further is that because instead of asking him politely to explain it, you seem to do it the other way around...

and one last thing, most of the answers to your queries about baassee's post can be found on the beginner's tutorials on the tut section... anyway, just to answer even one of them: triggering unit works faster than dying unit (or any other xx unit)...

PS: about your first reply to me: well, yes, we make these spells for our own liking, but since we decide to upload it, we should keep in mind that we should at least give the users possible customizations within their reach... as I've read your reply stating about cooldown and realism, well, that is based on your cooldown, but what if the end-user modifies it (which is a highly REALISTIC scenario)?
 
hmm I get the feeling that

  • Set TargetLocMove[Key2] = (TargetLocTemp[Key2] offset by (Random real number between 100.00 and 400.00) towards (Random angle) degrees)
Leaks, since while it is removed elsewhere I believe it's quite possible for it to be set again without the previous being removed.

Any constants you have should/could be also be made into configurables, and does this level?

Also because I just have to:

Irony =/= Sarcasm
 
Level 8
Joined
Oct 26, 2008
Messages
387
hmm I get the feeling that

  • Set TargetLocMove[Key2] = (TargetLocTemp[Key2] offset by (Random real number between 100.00 and 400.00) towards (Random angle) degrees)
Leaks, since while it is removed I believe it's quite possible for it to be set again without the previous being removed.

Also because I just have to:

Irony =/= Sarcasm

I dont think so, each time the thing is cast the Index becomes a different number, so each time its destroyed, the specific index is destroyed.
I dont know any way of checking leaks for sure though :(
 
Well I say this because if I look at the segment:


  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • TickingClock[Key2] Equal to Duration
    • Then - Actions
      • -------- If the timer is equal to the preadjusted duration, the it cancels the effect. --------
      • Unit Group - Remove Target[Key2] from TargetsGroup
      • Special Effect - Destroy SpecialEffect[Key2]
      • Unit - Remove Fear buff from Target[Key2]
      • Custom script: call UnitRemoveAbilityBJ( 'Abun', udg_Target[udg_Key2] )
      • Custom script: call RemoveLocation(udg_TargetLocMove[udg_Key2] )
      • Custom script: call RemoveLocation(udg_TargetLocTemp[udg_Key2] )
    • Else - Actions
      • -------- If the timer is not equal to the preadjusted duration, sets the next target point for the target to move. --------
      • Set TargetLocMove[Key2] = (TargetLocTemp[Key2] offset by (Random real number between 100.00 and 400.00) towards (Random angle) degrees)


If it runs twice without the duration then lining up, the location is changed again, without the previous setting being cleaned up? I mean I could swear that's what it does
 
Level 8
Joined
Oct 26, 2008
Messages
387
Well I say this because if I look at the segment:


  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • TickingClock[Key2] Equal to Duration
    • Then - Actions
      • -------- If the timer is equal to the preadjusted duration, the it cancels the effect. --------
      • Unit Group - Remove Target[Key2] from TargetsGroup
      • Special Effect - Destroy SpecialEffect[Key2]
      • Unit - Remove Fear buff from Target[Key2]
      • Custom script: call UnitRemoveAbilityBJ( 'Abun', udg_Target[udg_Key2] )
      • Custom script: call RemoveLocation(udg_TargetLocMove[udg_Key2] )
      • Custom script: call RemoveLocation(udg_TargetLocTemp[udg_Key2] )
    • Else - Actions
      • -------- If the timer is not equal to the preadjusted duration, sets the next target point for the target to move. --------
      • Set TargetLocMove[Key2] = (TargetLocTemp[Key2] offset by (Random real number between 100.00 and 400.00) towards (Random angle) degrees)


If it runs twice without the duration then lining up, the location is changed again, without the previous setting being cleaned up? I mean I could swear that's what it does

Yes, indeed, you are right. Thank you Commander, keen eye there :thumbs_up:
 
Level 2
Joined
Aug 6, 2010
Messages
6
  • Events
    • Unit - A unit Starts the effect of an ability
  • Conditions
    • (Ability being cast) Equal to Fear
    • (Target unit of ability being cast) Equal to THW
    • (Casting Unit) Equal to Maestros
  • Actions
    • Unit - Order (baassee) to Orc Troll Berserker - Berserk
    • Unit - Order (baassee) to Attack (Maestros)

P.S: It leaks!
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
You still got problems like duplicate code.

Cast trigger should look something this:

  • MF Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to MF_FearAbility
    • Actions
      • -------- Setting the Indexes --------
      • Set MF_Key = (Custom value of (Target unit of ability being cast))
      • Set MF_Target[MF_Key] = (Target unit of ability being cast)
      • Set MF_Caster[MF_Key] = (Triggering unit)
      • -------- Setting the Points --------
      • Set MF_Target_TempLoc[MF_Key] = (Position of MF_Target[MF_Key])
      • Set MF_TargetMoveTo_TempLoc[MF_Key] = (MF_Target_TempLoc[MF_Key] offset by (Random real number between 200.00 and 400.00) towards (Random angle) degrees)
      • -------- Checking wether spell is allowed on the same target multiple times --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • MF_AllowRepeatedCast Equal to False
        • Then - Actions
          • -------- If not allowed, then it checks if the target is already affected. --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (MF_Target[MF_Key] is in MF_TargetsGroup) Equal to True
            • Then - Actions
              • -------- If he is already affected, then displays the message "Immune" --------
              • Floating Text - Create floating text that reads Immune above MF_Target[MF_Key] with Z offset 50.00, using font size 10.00, color (80.00%, 0.00%, 100.00%), and 20.00% transparency
              • Floating Text - Change (Last created floating text): Disable permanence
              • Floating Text - Change the lifespan of (Last created floating text) to 0.80 seconds
              • Floating Text - Change the fading age of (Last created floating text) to 0.50 seconds
              • Skip remaining actions
            • Else - Actions
        • Else - Actions
      • -------- If allowed, does initial settings. --------
      • -------- Destruction of Special Effect, so Special Effects Dont Stick arround if they are there from previous cast. --------
      • Special Effect - Destroy MF_SpecialEffect[MF_Key]
      • -------- Adding Target to Targets Group --------
      • Unit Group - Add MF_Target[MF_Key] to MF_TargetsGroup
      • -------- Creating and Setting of Special Effect --------
      • Special Effect - Create a special effect attached to the overhead of MF_Target[MF_Key] using Abilities\Spells\Undead\Curse\CurseTarget.mdl
      • Set MF_SpecialEffect[MF_Key] = (Last created special effect)
      • -------- HP Settings for later Check --------
      • Set MF_TargetHPInit[MF_Key] = (Life of MF_Target[MF_Key])
      • -------- Nulling the Tickers --------
      • Set MF_Ticker[MF_Key] = 0
      • Set MF_Ticking[MF_Key] = 0
      • -------- Nulls targets Attack --------
      • Custom script: call UnitAddAbility(udg_MF_Target[udg_MF_Key], 'Abun')
      • -------- Opens Secondary Triggers --------
      • Trigger - Turn on MF Loop <gen>
      • Trigger - Turn on MF Order Interception NO TARGET <gen>
      • Trigger - Turn on MF Order Interception OBJECT <gen>
And besides that, why you name a location temppoint when it's not temporary?

In the loop trigger you should store the arithmetic into a variable as well:

  • MF_Ticker[MF_Key] Not equal to (MF_Duration + ((MF_Duration_Up x (Level of MF_FearAbility for MF_Caster[MF_Key])) - MF_Duration_Up))
You reset ticker and ticking in the cast trigger, no need to do that once again in the loop trigger.

Store it into a variable

  • (Life of MF_Target[MF_Key]) Less than (MF_TargetHPInit[MF_Key] - (MF_Damage_Limit + ((MF_Damage_Limit_UP x (Real((Level of MF_FearAbility for MF_Caster[MF_Key])))) - MF_Damage_Limit)))
More duplicate code for the damage thingie.

This if should be beneath each time you finished an instance, not at the end of the loop:

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (MF_TargetsGroup is empty) Equal to True
    • Then - Actions
      • -------- If so, then turns off Helping Triggers --------
      • Trigger - Turn off (This trigger)
      • Trigger - Turn off MF Order Interception NO TARGET <gen>
      • Trigger - Turn off MF Order Interception OBJECT <gen>
    • Else - Actions
      • -------- If not repeat --------
 
Level 8
Joined
Oct 26, 2008
Messages
387
Why people even defend crappy GUI code is beyond me.
Try not to get so butt hurt when someone gives you constructive criticism.
I myself have done the same thing, but in all honesty it just makes you look bad.

"Do this"
"Do that"
"this is bad"
"instead of this use this its better"

The above IS NOT CONSTRUCTIVE CRITISISM.As a matter of fact it is not critisism at all. The whole issue above happened because i WANT critisism to be CONSTRUCTIVE, not random "suggestions".


A critique should look like this.

I liked this, this this.
I disliked this this.


A constructive critique should look like this,

I liked this, because its that.
I liked this feature, because its helpfull here and there.

I didnt like this, because it can cause perfromance issues.
I didnt like this, because the idea was not original.

etc.

And then, you can post some suggestions like this,

I am suggesting to do this, instead of this. Because it is going to work better that way.
Add this, remove this, in order to make it look more... <something>

And that is how you achieve constructive critisism and constructive suggestions.
 
Last edited:
Level 5
Joined
Aug 25, 2010
Messages
120
Good spell. I tried it, and i found some strange events.

Sometimes the effect overhead the affected unit dissapears, but the units is in fear, and sometimes the computer units "freeze" 2-3 secs after the fear. If there any building or tree the feared unit dont move only stay here.

Could you modify the spell to it will be buff dependant? So it could be interrupted by dispel (as sleep) not only damage.

Good work anyway!!!
 
Level 8
Joined
Oct 26, 2008
Messages
387
Good spell. I tried it, and i found some strange events.

Sometimes the effect overhead the affected unit dissapears, but the units is in fear, and sometimes the computer units "freeze" 2-3 secs after the fear. If there any building or tree the feared unit dont move only stay here.

Could you modify the spell to it will be buff dependant? So it could be interrupted by dispel (as sleep) not only damage.

Good work anyway!!!

I will search and try to find the problem about the disappearing effect.
Also about the "freeze" thing.

About the other issues now.

The whole idea works on order "move".
So if you stun it, or sleep it, it won't be able to "move".
Also, it selects a new random location every second, so if it is ultra blocked by trees, and the random selected location is inside the tree block, its possible that it will have nowhere to go.
 
Level 5
Joined
Aug 25, 2010
Messages
120
Yes maybe due to lag.

I wanna to know, are there any solution, when the next target point will be behind trees or any block, the unit immediately change the next position? Because when the feared unit wants to move trough the trees it stops and stops the whole trigger, never move anymore.
 
Level 1
Joined
Dec 19, 2012
Messages
3
Oh what a nice spell...
Works just as it should
I think there is no need for interception triggers tho...
Reasoning behind this is when i made a fear of my own (for personal uses of course since i don't know to make a proper working MUI spell) in order to prevent the target unit from takeing any form of action i used the Change Owner - Neutral Passive (Retain colors) and once the fear expires return the owner back to the previous.
But than again perhaps that would be inpractical here.
Thoughts?
Still GJ 5/5
 
Top