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!
Created by JeffQ a.k.a JeffreyQ, SmileyJeff
Version distributed by other people are edited and not by me.
I recommend all users who downloaded this to re-download as i revamp the chain system and it is alot alot more polish now than before and more flexible as i remove the ChainEffect ability creation limitation. Cheers~
1. Please do give credits if you use this in your map.
2. This is fully MUI/GUI using indexing
3. Supports alot of things (Atleast those chain ideas that i got for my map)
Q: Why is it version 1.11 as this is your 1st version?
A: Because i edited 11 times before removing all of the bugs and finally submitting this polish version (So far no bugs i found yet)
Q: Why is the picture you used for this system so ugly?
A: Sorry, my photoshop sucks ]:
Additional Knowledge to Use this System
- Object Editor (Unit/Ability/Buff)
Q: Why do i need to know the object editor?
A: I base alot of things on it. And to create effects you need to use it.
Q: Why do i want to use this?
A: Its easy to use. You can customize alot of things, from damage, to jump count, jump delay between chains. Hit both ally and enemy, steal gold, mana, health, damage add your own effects etc. etc.
How to Implement?
***You can also download the map, the below step by step tutorial is included in the map's README
======================
How to Use?
======================
If your map is a New Map without any triggers:
1. Open JeffQ's Basic Chain System map.
2. Open Trigger Editor.
3. File > Export Triggers.
4. Open your map.
5. Open Trigger Editor.
6. File > Import Triggers.
7. Remember to copy the Dummy over too.
OR
If your map has existing triggers:
1. Open JeffQ's Basic Chain System map.
2. Copy JeffQ's Chain System folder by right-clicking it and select Copy.
3. Open your map.
4. File > Preference > Check "Automatically create unknown variables while pasting trigger data".
5. Open Object Editor. Create a Dummy base on anything, name it Dummy and give it locust and remove its model. Or just copy the dummy from my map.
6. Open Trigger Editor.
7. Right click on the Map Name, or any other trigger/category/comments, and select Paste.
8. Create a variable by pressing CTRL+B and name it QJCS_ChainZ of type Real, array size of 1.
9. Go to "Chain Create" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
10.Go to "Chain Jump" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
11.Go to "Chain effect" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
Limitations
Q: What?! There are limitations?
A: Only Stun and Slow ability have limitations. This is because i order the dummy to human - storm bolt and human sorc - slow in the system.
Flexibility
I did say this system is very flexible except for the few limitations. Which are actually rules you have to follow to use this system. Try any combinations you want and let me know what results you get [: Almost everything stacks.
Briefly what it supports, detail explanation in README in the map.
- Damage enemies
- Heal Allies
- Steal Health
- Steal Mana
- Steal Gold
- Slow
- Stun
- Target Unit
- Target Point
- No Target
- MUI
- And many many more!
Currently In Map Spells:
- Chain Lightning (Typical with red lightning effect)
- Chain Heal (Heals ally and damage enemy)
- Chain Nova (AoE damage and slows enemy)
- Chain Steal (Steals enemy gold and transfer to self)
- Chain Siphon (Steal health and mana and transfer to self)
- Chain Sleep (Makes enemy sleep, wake on hit)
- Chain Polymorph (Change enemy units into random critters) new!
- Chain Invisibility (Change ally units to invisible) new!
=====================
Bugs & FeedBacks
=====================
If you find any bugs please send an email to [email protected] or post a comment here.
**Enjoy using [:
EDIT: OPS! forgot the code, here is it. Thanks for reminding me baassee.
Chain Globals
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
-------- DON'T TOUCH ANYTHING HERE --------
-------- Locust --------
-------- This variable is to make sure chain won't jump to units who have this ability --------
Custom script: set udg_QJCS_Locust = 'Aloc'
Chain Create
Events
Conditions
Actions
-------- DON'T TOUCH ANYTHING HERE --------
-------- 1 is to check how many spells are running. 2 is for storage --------
-------- If empty instances, run trigger, so that when it is above 1, it keep calling it to turn on. --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJC_JumpCount Less than or equal to 0
Then - Actions
Set QJC_JumpCount = 1
Else - Actions
-------- Target Unit Limitations --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJC_NoTarget Equal to True
Then - Actions
-------- If No Target, get nearest target around caster --------
Set QJCS_tempGroup = (Units within QJC_JumpRadius of QJCS_tempPos[1] matching (((((Matching unit) is alive) Equal to True) and ((Level of QJCS_Locust for (Matching unit)) Equal to 0)) and ((((Matching unit) belongs to an enemy of (Owner of QJC_Caster)) Equal to QJC_Enemy) or (((M
Set QJC_TargetUnit = (Random unit from QJCS_tempGroup)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJC_TargetUnit Equal to No unit
Then - Actions
Set QJCS_tempGroup = (Units within QJC_JumpRadius of QJC_TargetPoint matching (((((Matching unit) is alive) Equal to True) and ((Level of QJCS_Locust for (Matching unit)) Equal to 0)) and ((((Matching unit) belongs to an enemy of (Owner of QJC_Caster)) Equal to QJC_Enemy) or (((M
Set QJC_TargetUnit = (Random unit from QJCS_tempGroup)
Special Effect - Create a special effect attached to the origin of QJCS_TargetUnit[QJCS_index[3]] using QJCS_TargetSFX[QJCS_index[3]]
Special Effect - Destroy (Last created special effect)
-------- Get Target Position --------
Set QJCS_tempPos[2] = (Position of QJCS_TargetUnit[QJCS_index[3]])
-------- AoE --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_AoE[QJCS_index[3]] Equal to True
Then - Actions
-------- Set Group --------
-------- CHANGE TO TARGET POS --------
Set QJCS_aGroup[QJCS_index[3]] = (Units within QJCS_AoERadius[QJCS_index[3]] of QJCS_tempPos[2] matching (((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A structure) Equal to False) and ((Level of QJCS_Locust for (Matching unit)) Equal to 0))) and ((((Matching unit) be
Else - Actions
Set QJCS_aGroup[QJCS_index[3]] = (Units within QJCS_JumpRadius[QJCS_index[3]] of QJCS_tempPos[2] matching ((((Matching unit) is alive) Equal to True) and ((Matching unit) Equal to QJCS_TargetUnit[QJCS_index[3]])))
-------- Damage --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Damage[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
((Picked unit) belongs to an enemy of (Owner of QJCS_Caster[QJCS_index[3]])) Equal to True
QJCS_Enemy[QJCS_index[3]] Equal to True
Then - Actions
Unit - Cause QJCS_Caster[QJCS_index[3]] to damage (Picked unit), dealing QJCS_Amount[QJCS_index[3]] damage of attack type QJCS_AttackType[QJCS_index[3]] and damage type QJCS_DamageType[QJCS_index[3]]
Else - Actions
Else - Actions
-------- Heal --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Heal[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Picked unit) belongs to an ally of (Owner of QJCS_Caster[QJCS_index[3]])) Equal to True
Then - Actions
Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + QJCS_Amount[QJCS_index[3]])
Else - Actions
Else - Actions
-------- Health --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Health[QJCS_index[3]] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Leech[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
And - All (Conditions) are true
Conditions
(Life of (Picked unit)) Greater than QJCS_Amount[QJCS_index[3]]
Then - Actions
-------- Increase Caster's Health --------
Unit - Set life of QJCS_Caster[QJCS_index[3]] to ((Life of QJCS_Caster[QJCS_index[3]]) + QJCS_Amount[QJCS_index[3]])
Else - Actions
-------- Increase Caster's Health --------
Unit - Set life of QJCS_Caster[QJCS_index[3]] to ((Life of QJCS_Caster[QJCS_index[3]]) + (Life of (Picked unit)))
Else - Actions
-------- Do Damage --------
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
Unit - Cause QJCS_Caster[QJCS_index[3]] to damage (Picked unit), dealing QJCS_Amount[QJCS_index[3]] damage of attack type QJCS_AttackType[QJCS_index[3]] and damage type QJCS_DamageType[QJCS_index[3]]
Else - Actions
-------- Mana --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Mana[QJCS_index[3]] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Leech[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Mana of (Picked unit)) Greater than QJCS_Amount[QJCS_index[3]]
Then - Actions
-------- Increase Caster's Mana --------
Unit - Set mana of QJCS_Caster[QJCS_index[3]] to ((Mana of QJCS_Caster[QJCS_index[3]]) + QJCS_Amount[QJCS_index[3]])
Else - Actions
-------- Increase Caster's Mana --------
Unit - Set mana of QJCS_Caster[QJCS_index[3]] to ((Mana of QJCS_Caster[QJCS_index[3]]) + (Mana of (Picked unit)))
Else - Actions
-------- Reduce Enemy Mana --------
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
Unit - Set mana of (Picked unit) to ((Mana of (Picked unit)) - QJCS_Amount[QJCS_index[3]])
Else - Actions
-------- Gold --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Gold[QJCS_index[3]] Equal to True
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Leech[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Owner of (Picked unit)) Current gold) Greater than (Integer(QJCS_Amount[QJCS_index[3]]))
Then - Actions
Player - Add (Integer(QJCS_Amount[QJCS_index[3]])) to (Owner of QJCS_Caster[QJCS_index[3]]) Current gold
Else - Actions
Player - Add ((Owner of (Picked unit)) Current gold) to (Owner of QJCS_Caster[QJCS_index[3]]) Current gold
Else - Actions
-------- Deduct Gold --------
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
Player - Add (-1 x (Integer(QJCS_Amount[QJCS_index[3]]))) to (Owner of (Picked unit)) Current gold
Else - Actions
-------- Slow --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Slow[QJCS_index[3]] Equal to True
Then - Actions
Unit Group - Pick every unit in QJCS_aGroup[QJCS_index[3]] and do (Actions)
Loop - Actions
Set QJCS_tempPos[3] = (Position of (Picked unit))
Unit - Create 1 Dummy for (Owner of QJCS_Caster[QJCS_index[3]]) at QJCS_tempPos[3] facing Default building facing degrees
Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
Unit - Add QJCS_SlowEffect[QJCS_index[3]] to (Last created unit)
Unit - Order (Last created unit) to Human Sorceress - Slow (Picked unit)
Set QJCS_SystemCount[QJCS_index[3]] = (QJCS_SystemCount[QJCS_index[3]] + 1)
-------- Update Jump Count --------
Set QJCS_JumpCount[QJCS_index[3]] = (QJCS_JumpCount[QJCS_index[3]] - 1)
-------- UPDATE Amount --------
Set QJCS_Amount[QJCS_index[3]] = (QJCS_Amount[QJCS_index[3]] - (QJCS_Amount[QJCS_index[3]] x QJCS_AmountReduce[QJCS_index[3]]))
-------- Get Previous Target --------
Set QJCS_prevTarget[QJCS_index[3]] = QJCS_TargetUnit[QJCS_index[3]]
-------- Check if its OPU --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_OnePerUnit[QJCS_index[3]] Equal to True
Then - Actions
-------- Store Victim in to individual damagedGroup --------
Unit Group - Add QJCS_TargetUnit[QJCS_index[3]] to QJCS_dGroup[QJCS_index[3]]
-------- Set new VictimGroup with Damaged Group in condition --------
Set QJCS_victimGroup = (Units within QJCS_JumpRadius[QJCS_index[3]] of QJCS_tempPos[2] matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) Not equal to QJCS_TargetUnit[QJCS_index[3]]) and ((((Matching unit) is in QJCS_dGroup[QJCS_index[3]]) Equal to False) a
Else - Actions
-------- Set new VictimGroup --------
Set QJCS_victimGroup = (Units within QJCS_JumpRadius[QJCS_index[3]] of QJCS_tempPos[2] matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) Not equal to QJCS_TargetUnit[QJCS_index[3]]) and ((Level of QJCS_Locust for (Matching unit)) Equal to 0))) and ((((Matc
-------- Get Next Target --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in QJCS_victimGroup) Greater than 0
Then - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
QJCS_Priority[QJCS_index[3]] Equal to True
Then - Actions
-------- Get Lowest Health --------
Unit Group - Pick every unit in QJCS_victimGroup and do (Actions)
Loop - Actions
Set QJCS_currUnit = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Life of QJCS_currUnit) Less than (Life of QJCS_TargetUnit[QJCS_index[3]])
Then - Actions
Set QJCS_TargetUnit[QJCS_index[3]] = QJCS_currUnit
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(QJCS_TargetUnit[QJCS_index[3]] is in QJCS_victimGroup) Equal to True
Then - Actions
Set QJCS_TargetUnit[QJCS_index[3]] = QJCS_TargetUnit[QJCS_index[3]]
Else - Actions
Set QJCS_TargetUnit[QJCS_index[3]] = QJCS_currUnit
Else - Actions
-------- No priority, meaning random choose --------
Set QJCS_TargetUnit[QJCS_index[3]] = (Random unit from QJCS_victimGroup)
Else - Actions
-------- Set Jump Count to 0 to end it, because there is no more units nearby to hit --------
Thanks to the below who shed some light on me about indexing and leaks.
- Kingz
- YourNameHere
- baassee
- Adiktuz
- Maker
- TitanHex
- D4RK_G4ND4LF
- And other people if i miss out.
Special Thanks to Kingz who show me his simple lightning system. I learned alot from it and after understanding i made 1 my own to fit my system. +Rep
v2.00f, 24 Feb 2010
- Chain should no longer jump to buildings/structures.
- Some demo ability can still target buildings, this is because i didn't limit the target allowed at the ability editor. (Nothing to do with the system)
v2.00e, 31 Jan 2010
- Fix lightning height to match cliff or raised terrain.
- Added a raised terrain and cliff to test out.
v2.00d, 25 Jan 2010
- Rearrange Folder for easier implementing in other maps.
- Updated "How To Use" in the README to give a step by step tutorial on how to implement. Please do give it a read.
v2.00c, 24 Jan 2010
- Chain now gets unit height +25. Meaning that if you target a flying unit, the chain height will change accordingly.
- Added a few flying units to let you try out the dynamic chain height.
- Added Chain Globals Trigger to store Locust.
- Chain should now only jump to units that doesn't have locust (This should remove the limitation of where you need to only base all other ability dummies on my dummy as long as your custom dummies have locust).
v2.00b, 23 Jan 2010
- Lightning effect now won't stick to ground.
v2.00a, 23 Jan 2010
- Fix 2 major bugs that make the chain not MUI for chain effect and Stun effect. Due to setting the wrong index. Now it has been fixed and should no longer containt any more bugs! Thanks to my sis for testing out this with me [:
v2.00, 22 Jan 2010
- v2.00, 22 Jan 2010
- Revamp the chain effect system.
- Remove dummy type. You still have to copy the dummy to your map though.
- Remove finger of death limitations. Now you can choose your chain effect freely.
- Added a new Chain Effect Trigger.
- This allows the chain to follow the unit if it is moving.
- Polish code.
- Fixed a few bugs in code.
- Added Implementation Details Trigger and tidy up the Example 1-8 Implementations.
- Removed all (SFX) ability as now you can use the QJC_ChainSFX to set your lightning effect.
- Chain effect should look way more nicer now [:
v1.14, 22 Jan 2010
- Added 2 new abilities chain sheep and chain invisible to show the flexibility of this system and how to play around with stun/slow effect to your advantages.
v1.13a, 22 Jan 2010
- Added a sleep ability in the implementation after Kingz asked me what if he wanted to create a chain sleep. (No additional system code added).
- Fix several bugs.
v1.12, 21 Jan 2010
- Periodic Time change to 0.03seconds. And System Time update + 0.03 from 0.01.
v1.11a, 21 Jan 2010
- Fixed Implementation Example Comment for Chain Effect.
v1.11, 21 Jan 2010
- Initial Release.
Keywords:
chain, system, target, unit, point, no target, gui, mui, index, spell, pack, nova, slow, stun, gold, steal, lightning, siphon, damage, heal, sheep, in
but if you save a map in the official Map editor and then open it in JNGP it'll say
"this map was saved in a more recent editor, some function might be lost. continue?"
or something along those lines anyways. soooo, why does it bug for me D:!?
that message always show... but it doesn't really affect the editor or the game... at least based on my experience...
-enabled as in, selecting them and setting the correctvalue/pressing enter?-
-->yup... maybe you hadn't checked the automatically create unknown variables on the preferences...
No clue on how to use it? he included a how to implement on the first page...
Absolutely nowhere to start configuring spells? this system is really easy to configure and it offers a lot of configurables... maybe you hadn't realized the fact that the config is done in your own spell trigger and not on the default triggers it has
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.