Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
since iam a newbie if you could please give the sample map too.
because iam a little confuse about a spell that must using the dummy ( exactly confuse in dummy part ).
Note : The Spell is in GUI version And the Spell is Passive ability like in the pic i show you and you only be able get this spell if you have a special item like example orb of frost. all player can have an impetus ability if they get Orb of frost special item.
I have a map that remake this ability in GUI, but it's still as a auto-cast spell. With some edits, you could make your dream comes true View attachment [Demo]AutoCast.w3x
Credits should given to Tom_Kazansky
Glad to be able to help
Having it auto cast doesn't really do anything, you'd be checking in the damage trigger if attacker has ability.
I'm not getting any floating text like your trigger says.
I don't see any bonus damage based on my distance.
Your skill has an AOE setting for some reason :/
You'll need some kind of Damage Detection System (DDS)
and make trigger for,
condition
DmgOff = 0
If AttackingUnit has SKILL
set TempLoc1 to position of AttackingUnit
set TempLoc2 to Position of DamagedUnit
Distance = Calculate the distance between them
set Damage = Distance x Bonus
set DmgOff = 1
Make AttackingUnit damage DamagedUnit for Damage
set DmgOff = 0
Having it auto cast doesn't really do anything, you'd be checking in the damage trigger if attacker has ability.
I'm not getting any floating text like your trigger says.
I don't see any bonus damage based on my distance.
Your skill has an AOE setting for some reason :/
You'll need some kind of Damage Detection System (DDS)
and make trigger for,
condition
DmgOff = 0
If AttackingUnit has SKILL
set TempLoc1 to position of AttackingUnit
set TempLoc2 to Position of DamagedUnit
Distance = Calculate the distance between them
set Damage = Distance x Bonus
set DmgOff = 1
Make AttackingUnit damage DamagedUnit for Damage
set DmgOff = 0
I have a map that remake this ability in GUI, but it's still as a auto-cast spell. With some edits, you could make your dream comes true View attachment 106617
Credits should given to Tom_Kazansky
Glad to be able to help
You just need to use another base passive ability which add a buff to enemy unit on attack like slow poison... etc (use the same buff as the Impetus spell use). And your trigger should be like this:
Set TempUnit = (Triggering unit)
Set TempUnit2 = (Damage source)
Set TempReal = (Damage taken)
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((TempUnit2) has an item of type [YourItem]) Equal to (==) True
(TempUnit has buff Impetus ) Equal to (==) True
Then - Actions
Unit - Remove Impetus buff from TempUnit
Set TempLoc = (Position of TempUnit2)
Set TempLoc2 = (Position of TempUnit)
Set TempReal = ((Distance between TempLoc and TempLoc2) x ([The number of percent of the distance as damage))
Floating Text - Create floating text that reads (|c0000FFFF+ + ((String((Integer(TempReal)))) + |r)) above TempUnit with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
Floating Text - Change (Last created floating text): Disable permanence
Floating Text - Change the lifespan of (Last created floating text) to 3.00 seconds
Unit - Cause TempUnit2 to damage TempUnit, dealing TempReal damage of attack type Chaos and damage type Universal
Else - Actions
That's all i guess. Good luck
Still no answer for this, so ... here it goes
You just need to use another base passive ability which add a buff to enemy unit on attack like slow poison... etc (use the same buff as the Impetus spell use). And your trigger should be like this:
Set TempUnit = (Triggering unit)
Set TempUnit2 = (Damage source)
Set TempReal = (Damage taken)
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((TempUnit2) has an item of type [YourItem]) Equal to (==) True
(TempUnit has buff Impetus ) Equal to (==) True
Then - Actions
Unit - Remove Impetus buff from TempUnit
Set TempLoc = (Position of TempUnit2)
Set TempLoc2 = (Position of TempUnit)
Set TempReal = ((Distance between TempLoc and TempLoc2) x ([The number of percent of the distance as damage))
Floating Text - Create floating text that reads (|c0000FFFF+ + ((String((Integer(TempReal)))) + |r)) above TempUnit with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
Floating Text - Change (Last created floating text): Disable permanence
Floating Text - Change the lifespan of (Last created floating text) to 3.00 seconds
Unit - Cause TempUnit2 to damage TempUnit, dealing TempReal damage of attack type Chaos and damage type Universal
Else - Actions
That's all i guess. Good luck
Still no answer for this, so ... here it goes
Ok, let me explain how it works...
1st, when the unit attack the enemy, it'll add a "dummy buff" to that unit. This dummy buff allow we to check if it is hit by the unit have this "Impetus ability" or not
Once the damage of this attacker is done to the attacked unit, this dummy buff will be removed and do the damage, etc..
So, that conditions
The 1st one check if attacking unit is having the item or not (instead of checking if it have the ability or not, we check item)
And the second line, it checks if the attacked unit is attacked by a unit that have this item by checking if it has the buff "impetus" or not
If need more help, just post here, if needed pm me (i'm not always on the hive)
Edit: The "True" option you can check it at the end of the box show up when you click at the line of "True" if that's what you're asking
The map i've posted above, the trigger i post is what you should change to the trigger in that map to work for a passive skill (or you mean item)
In that map, it already have a Damage Detection
@thedarkgodzz: I've been where you are, knowing nothing and wanting stuff the easy way. Life's not like that. You'll have to work a bit to get what you want, since you're the one that want's... what you want Besides, do it once, and the knowledge will remain for the rest of your life, So, I'll give you a small tutorial about this so you can understand how some stuff works:
Warcraft 3 doesn't have a good damage detection system, that's why there a custom created Damage Detection System, which detects when a damage is dealed and then does the actions you choose to. Is not necessary, but is good to have it. I use http://www.hiveworkshop.com/forums/...-v1-2-1-a-149098/?prev=search=GDD&d=list&r=20. You can check it, it's easy to use and to implement into your map. You don't have to understand it, just copy / paste and follow the only 5 instructions it has.
In this case, using a DDS will improve the action, because you need to check when the target actually receives the damage, and Warcraft only detects when a unit attacks a unit, wich is innacurate. Make your life easier, install the DSS .
I'll assume you're installing the DSS and explain how to make the trigger:
You have an attacking unit (GDD_DamageSource), and a Attacked Unit (GDD_DamagedUnit), you also need 2 Point variables (Position of GDD_DamageSource, and Position of GDD_DamagedUnit). You also have the distance between these two positions. so, create these variables and ser their values in the actions the same way Striker21 explained you before. I'll do it by parts, and then show you the whole trigger:
TEST
Events
Game - GDD_Event becomes Equal to 0.00
Conditions
(Level of Impetus for GDD_DamageSource) Equal to 1
Actions
Set Point1 = (Position of GDD_DamageSource)
Set Point2 = (Position of GDD_DamagedUnit)
This part is easy. Point1 and Point2 are Variables for Type: Point. Use action: 'Set Variable' and choose 'Point1', then choose the = value, changing (Triggering Unit) for GDD_DamageSource, same for Point2.
Now, the damage is not Integer, it's a Variable of type 'Real'. Use 'Set Variable' Action, choose 'Real', and choose = value of Real to 'Arithmetic'. Change the first value (to the left) with 'Distance between Temp_Point and Temp_Point' Then do your maths in the second value (to the right). You can do all the 'Arithmetic' you like, as long as you know what you're doing =) Gets a bit messy when you have like 8 Arithmetic functions in the same formula, because of all the parentheses and stuff... But this is a small triggering tutorial, not a Math class.
Set Real = ((Distance between Point1 and Point2) x Do your maths to manipulate the distance however you like)
Now, you have to actually deal the damage
Unit - Cause GDD_DamageSource to damage GDD_DamagedUnit, dealing Real damage of attack type Chaos and damage type Universal
Now, to create the floating text that displays the damage, you have to do the next:
Floating Text - Create floating text that reads (|c0000FFFF+ + ((String(Real))) + |r)) above GDD_DamagedUnit with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
You have to use 3 concatenated strings (one of them within one of the other two). I'll tell you how to make it. (These values are found inside the action that folows 'Create floating text that reads...' <Select 'Concatenated Strings>
'String1' + 'String2'. Pick 'String1' and, again, do 'Concatenated Strings' To have 'String1' + 'String2' again.
Now choose 'String 1' and type: |cFFFF0000+ <- This is the code for RED. The Plus sign is not part of the code, it will be displayed in RED like +200.
Now choose 'String 2' and select: 'Convert Real to String', and choose your 'Real' variable.
Now accept. You'll see in the left '|cffff0000 + ((String(Real)) + 'String 2'', or something like that.
Choose 'String 2' and type |r <- This closes the code for RED. Anything between the |cffff0000 and |r will be 'Red'
Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
It will make the floating text move to the skies... But you want make it fade after a while, so, we disable the permanence of the floating text (It's permanent by default?
Floating Text - Change (Last created floating text): Disable permanence
Now you have to tell Warcraft when the Floating Text will start fading
Floating Text - Change the fading age of (Last created floating text) to 1.00 seconds
It will now fade and turn transparent/invisible, but will remain there, you need to destroy it or your game will lag after a while. That's why we use:
Floating Text - Change the lifespan of (Last created floating text) to 3.00 seconds
Now, least but MOST important, you have to clean the mess done. You created two 'Points' to tell Warcraft where your units where standing, you have to destroy those using an amazing action called. 'Use Custom Script'
Custom script: call RemoveLocation(udg_Point1)
Custom script: call RemoveLocation(udg_Point2)
If you used named different than Point1 and Point2, just change it for call RemoveLocation(udg_YOURpointVARIABLEname). Also, to prevent your game from crashing, and your unit to deal infinite amounts of damage to the target, you can turn off the trigger at the beginning of the actions (It won't skip the remaining actions in it) and then turn it off at the end. It will prevent loop.
And, the magic is done. Here's the whole trigger:
TEST
Events
Game - GDD_Event becomes Equal to 0.00
Conditions
(Level of Impetus for GDD_DamageSource) Equal to 1
Actions
Trigger - Turn off (this trigger)
Set Point1 = (Position of GDD_DamageSource)
Set Point2 = (Position of GDD_DamagedUnit)
Set Real = ((Distance between Point1 and Point2) x Do your maths to manipulate the distance however you like)
Unit - Cause GDD_DamageSource to damage GDD_DamagedUnit, dealing Real damage of attack type Chaos and damage type Universal
Floating Text - Create floating text that reads (|c0000FFFF+ + ((String(Real))) + |r)) above GDD_DamagedUnit with Z offset 0.00, using font size 10.00, color (100.00%, 100.00%, 100.00%), and 0.00% transparency
Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
Floating Text - Change (Last created floating text): Disable permanence
Floating Text - Change the fading age of (Last created floating text) to 1.00 seconds
Floating Text - Change the lifespan of (Last created floating text) to 3.00 seconds
Custom script: call RemoveLocation(udg_Point1)
Custom script: call RemoveLocation(udg_Point2)
Trigger - Turn on (this trigger)
Everytime you pick an item, all the items abilities are added to the hero. That's why you just have to check if the level of the ability the item has for that unit is 1, it means the unit has the item. You don't even have to show the Passive Ability icon in the unit Command Panel. You can give the item abilities information in the item tooptip, and reserve the Unit Command Pannel for other active abilities. (This is just a tip, use it however you like)
I forgot the part of 'Follow Weep's instructions' wich are something like:
"If your trigger damages infinitely, you can turn off in the beginning and turn it on again at the ending of the trigger. it will prevent looping". <- That's how I prevent damage loops in my map though your solution may work too. @Ultimatony.
The thing is: If you pay more attention and read carefully, you'll life will be easier and happier
Your trigger is perfect, the only thing is:
Weep's Damage Detection System said:
-- How To Implement --
- Be sure "Automatically create unknown variables while pasting trigger data" is enabled in the World Editor general preferences.
- Copy the trigger category "GDD" from the demo map and paste it into your map. (Alternately: create the variables listed in the globals block below, create a trigger named GUI Friendly Damage Detection", and paste in this entire text.) - Create your damage triggers using Game - Value Of Real Variable, select GDD_Event as the variable, and leave the rest of the settings to the default "becomes Equal to 0.00".
In your trigger, you're using as an event: GDD_Damage, not GDD_Event. That's what it isn't working. I changed it from GDD_Damage to GDD_Event, tested and works. Btw, the only trigger you need from GDD is "GUI Friendly Damage Detection", you can delete the rest, since they're there for testing purposes, and the color code: |c0000ffff is TEAL, red is |cffff0000 (swap F's and 0's).
If you don't want to show decimals, you have to convert Real to Integer
Set Int = (Integer(Real))
Floating Text - Create floating text that reads (|cffff0000 + ((String(Int)) + |r)) above GDD_DamagedUnit with ...
do you know how to make that the damage not just come/count from
(Distance between Point1 and Point2 x 2.00 ) but also it count the INT of damage source ????
so the impetus damage dealt to enemy is "Distance Point1 and Point2 x 2.00 x Int of damage source !!!
if you know please show me how to do that and the floating text part if it needed to be changed please show me what i must change so it can show the total damage that dealt to enemy properly !!
Hehehehe... 'funny'. You can add that part of 'Real Intelligence of GDD_DamageSource' to the 'Real' variable.
You have a variable of type 'Real' called 'Real' (wich works with decimals) and, so far, is set to add ((Distance between Point1 and Point2) x 2.00) damage.
Set Real = ((Distance between Point1 and Point2) x 2.00)
To get rid of decimals, we transform it into a Integer Variable
Set Int = (Integer(Real))
And the Floating Text reads the Int variable, not the damage dealt.
Floating Text - Create floating text that reads (|c0000FFFF + ((String(Int)) + |r)) above GDD_DamagedUnit with Z
So, you are adding damage, but directly to the 'damage', and not to the Real variable that is converted later to Int variable, and later converted to String, in order to be displayed by the Floating Text.
---------------- What to do?
Add This damage:
Unit - Cause GDD_DamageSource to damage GDD_DamagedUnit, dealing (Real x (Real((Intelligence of GDD_DamageSource (Exclude bonuses)))))
To This Variable
Set Real = ((Distance between Point1 and Point2) x 2.00)
And just cause the DamageSource to deal 'Real' (The variable) damage to DamagedUnit.
Would be something like:
Set Real = ((Distance between Point1 and Point2) x (2.00 x (Real((Intelligence of GDD_DamageSource (Exclude bonuses)))))))
Example: If distance between points is 500, and intelligence of the hero is 50 Damage dealt would be:
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.