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

Tiny the Stone Giant spells v1.2

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: deepstrasz
This spells created by me, they're similar to DotA hero {Tiny}.
The spells are GUI and MUI.

Please give me credits if you used it.
BY Storm_hih


Triggers :
1.Toss Start

  • Toss
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Toss
    • Actions
      • Set TossCount = (TossCount + 1)
      • Set TossU[TossCount] = (Triggering unit)
      • Set TossUT[TossCount] = (Target unit of ability being cast)
      • Set TossPoint = (Position of TossU[TossCount])
      • Set TossCounter[TossCount] = 0
      • Set TossGroup = (Units within 250.00 of TossPoint matching ((((Matching unit) is A structure) Not equal to True) and (((Matching unit) Not equal to TossU[TossCount]) and ((((Matching unit) is A ground unit) Equal to True) and (((Matching unit) is alive) Equal to True)))))
      • Set TossUP[TossCount] = (Random unit from TossGroup)
      • Set TossAC[TossCount] = 0
      • Unit - Turn collision for TossUP[TossCount] Off
      • Unit - Add Storm Crow Form to TossUP[TossCount]
      • Unit - Remove Storm Crow Form from TossUP[TossCount]
      • Unit - Pause TossUP[TossCount]
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TossUP[TossCount] Equal to No unit
        • Then - Actions
          • Unit - Order TossU[TossCount] to Stop
          • Set TossStop[TossCount] = 1
          • Set TossPlayer = (Player group((Owner of TossU[TossCount])))
          • Cinematic - Clear the screen of text messages for TossPlayer
          • Game - Display to TossPlayer for 8.00 seconds the text: ...
          • Player Group - Pick every player in TossPlayer and do (Actions)
            • Loop - Actions
              • Custom script: if GetLocalPlayer() == GetEnumPlayer() then
              • Sound - Play Error <gen>
              • Custom script: endif
          • Custom script: call DestroyForce (udg_TossPlayer)
          • Unit - Set mana of (Triggering unit) to ((Mana of (Triggering unit)) + 120.00)
        • Else - Actions
          • Special Effect - Create a special effect attached to the chest of TossUP[TossCount] using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
          • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation (udg_TossPoint)
      • Custom script: call DestroyGroup (udg_TossGroup)


2.Toss Fly

  • Toss Fly
    • Events
      • Time - Every 0.02 seconds of game time
    • Conditions
    • Actions
      • For each (Integer TossLoop) from 1 to TossCount, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TossStop[TossLoop] Equal to 0
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TossCounter[TossLoop] Less than or equal to 53
                • Then - Actions
                  • Set TossCounter[TossLoop] = (TossCounter[TossLoop] + 1)
                  • Animation - Change TossUP[TossLoop] flying height to (775.00 - ((((Real(TossCounter[TossLoop])) - 25.00) x ((Real(TossCounter[TossLoop])) - 25.00)) - 25.00)) at 0.00
                  • Set TossP2[TossLoop] = (Position of TossUT[TossLoop])
                  • Set TossP3[TossLoop] = (Position of TossUP[TossLoop])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (TossUP[TossLoop] has buff Cluster Rockets) Equal to True
                      • (TossUP[TossLoop] belongs to an enemy of (Owner of TossU[TossLoop])) Equal to True
                      • TossAC[TossLoop] Less than 4
                    • Then - Actions
                      • Unit - Cause TossU[TossLoop] to damage TossUP[TossLoop], dealing (0.35 x (75.00 x (Real((Level of Avalanche for TossU[TossLoop]))))) damage of attack type Magic and damage type Universal
                      • Set TossAC[TossLoop] = (TossAC[TossLoop] + 1)
                    • Else - Actions
                  • Set TossCheckGroup = (Units within 80.00 of TossP2[TossLoop] matching ((Matching unit) Equal to TossUP[TossLoop]))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (TossCheckGroup is empty) Equal to True
                    • Then - Actions
                      • Set TossP4[TossLoop] = (TossP3[TossLoop] offset by ((Distance between TossP3[TossLoop] and TossP2[TossLoop]) / (50.00 - (Real(TossCounter[TossLoop])))) towards (Angle from TossP3[TossLoop] to TossP2[TossLoop]) degrees)
                      • Unit - Move TossUP[TossLoop] instantly to TossP4[TossLoop]
                      • Custom script: call RemoveLocation (udg_TossP4[udg_TossLoop])
                    • Else - Actions
                  • Custom script: call RemoveLocation (udg_TossP2[udg_TossLoop])
                  • Custom script: call RemoveLocation (udg_TossP3[udg_TossLoop])
                  • Custom script: call DestroyGroup (udg_TossCheckGroup)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TossCounter[TossLoop] Greater than 53
                    • Then - Actions
                      • Animation - Change TossUP[TossLoop] flying height to (Default flying height of TossUP[TossLoop]) at 0.00
                      • Unit - Turn collision for TossUP[TossLoop] On
                      • Unit - Unpause TossUP[TossLoop]
                      • Special Effect - Create a special effect attached to the origin of TossUP[TossLoop] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (TossUP[TossLoop] belongs to an enemy of (Owner of TossU[TossLoop])) Equal to True
                        • Then - Actions
                          • Unit - Cause TossU[TossLoop] to damage TossUP[TossLoop], dealing ((0.20 + (0.20 x (Real((Level of Grow for TossU[TossLoop]))))) x (75.00 x (Real((Level of Toss for TossU[TossLoop]))))) damage of attack type Magic and damage type Universal
                        • Else - Actions
                      • Set TossP[TossLoop] = (Position of TossUP[TossLoop])
                      • Set TossP2[TossLoop] = (Position of TossUT[TossLoop])
                      • Set TossCheckGroup = (Units within 200.00 of TossP2[TossLoop] matching (((Matching unit) Not equal to TossU[TossLoop]) and (((Matching unit) Not equal to TossUP[TossLoop]) and ((((Matching unit) is A structure) Not equal to True) and (((Matching unit) belongs to an enemy of (Owne
                      • Unit Group - Pick every unit in TossCheckGroup and do (Actions)
                        • Loop - Actions
                          • Set TossPickedUnit[TossLoop] = (Picked unit)
                          • Unit - Cause TossU[TossLoop] to damage TossPickedUnit[TossLoop], dealing (0.00 + (75.00 x (Real((Level of Toss for TossU[TossLoop]))))) damage of attack type Magic and damage type Universal
                          • Set TossPickedUnit[TossLoop] = No unit
                      • Custom script: call DestroyGroup (udg_TossCheckGroup)
                      • Destructible - Pick every destructible in (Region centered at TossP[TossLoop] with size (275.00, 275.00)) and do (Actions)
                        • Loop - Actions
                          • Set TossPickedDest[TossLoop] = (Picked destructible)
                          • Destructible - Kill TossPickedDest[TossLoop]
                          • Set TossPickedDest[TossLoop] = No destructible
                      • Set TossU[TossLoop] = No unit
                      • Custom script: call RemoveLocation (udg_TossP[udg_TossLoop])
                      • Custom script: call RemoveLocation (udg_TossP2[udg_TossLoop])
                      • Custom script: call RemoveLocation (udg_TossP3[udg_TossLoop])
                      • Custom script: call RemoveLocation (udg_TossP4[udg_TossLoop])
                      • Set TossP[TossLoop] = (Position of TossUT[TossLoop])
                      • Unit - Move TossUP[TossLoop] instantly to TossP[TossLoop]
                      • Custom script: call RemoveLocation (udg_TossP[udg_TossLoop])
                      • Set TossUT[TossLoop] = No unit
                      • Set TossUP[TossLoop] = No unit
                      • Set TossStop[TossLoop] = 1
                    • Else - Actions
            • Else - Actions


3.Hard Skin

  • Events
    • Unit - A unit Is attacked
  • Conditions
    • ((Attacked unit) has buff Hard Skin ) Equal to True
    • ((Attacking unit) belongs to an enemy of (Owner of (Attacked unit))) Equal to True
  • Actions
    • Set SkinPoint = (Position of (Attacked unit))
    • Set SkinGroup = (Units within 300.00 of SkinPoint matching ((Matching unit) Equal to (Attacking unit)))
    • Unit Group - Pick every unit in SkinGroup and do (Actions)
      • Loop - Actions
        • Set SkinChance = (Random integer number between 1 and 100)
        • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • SkinChance Less than or equal to (6 x (Level of Hard Skin for (Attacked unit)))
          • Then - Actions
            • Unit - Create 1 Peasant for (Owner of (Attacked unit)) at (Position of (Attacked unit)) facing Default building facing degrees
            • Unit - Set level of Skin Stun for (Last created unit) to (Level of Skin Stun for (Last created unit))
            • Unit - Order (Last created unit) to Neutral - Hurl Boulder (Attacking unit)
            • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • Else - Actions
    • Custom script: call RemoveLocation (udg_SkinPoint)
    • Custom script: call DestroyGroup (udg_SkinGroup)


4.Dummy Clear

  • Clear
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Peasant
    • Actions
      • Unit - Remove (Triggering unit) from the game


5.Avalanche

  • Avalanche
  • Avalanche
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Avalanche
    • Actions
      • Set AvaP[1] = (Position of (Triggering unit))
      • Set AvaP[2] = (Target point of ability being cast)
      • Unit - Create 1 Peasant for (Owner of (Triggering unit)) at AvaP[1] facing 0.00 degrees
      • Unit - Add Avalanche D to (Last created unit)
      • Unit - Set level of Avalanche D for (Last created unit) to (Level of Avalanche for (Triggering unit))
      • Unit - Order (Last created unit) to Neutral Tinker - Cluster Rockets AvaP[2]
      • Unit - Add a 2.50 second Generic expiration timer to (Last created unit)
      • Custom script: call RemoveLocation (udg_AvaP[1])
      • Custom script: call RemoveLocation (udg_AvaP[2])


6.Grow

  • Grow
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Grow
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Triggering unit) is in GrowGroup) Not equal to True
        • Then - Actions
          • Unit - Add War Club to (Triggering unit)
          • Unit Group - Add (Triggering unit) to GrowGroup
          • Unit - Add Grow Damage to (Triggering unit)
        • Else - Actions
      • Unit - Set level of Grow Damage for (Triggering unit) to (Level of Grow for (Triggering unit))
      • Unit - Set (Triggering unit) movement speed to ((Default movement speed of (Triggering unit)) + (20.00 x (Real((Level of Grow for (Triggering unit))))))


7.Grow Scaling Loop

  • Grow R
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in GrowGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) has buff Bloodlust) Not equal to True
              • ((Picked unit) has buff Hex) Not equal to True
            • Then - Actions
              • Set GrowPicked = (Picked unit)
              • Animation - Change GrowPicked's size to ((40.00 + (35.00 x (Real((Level of Grow for GrowPicked)))))%, (40.00 + (35.00 x (Real((Level of Grow for GrowPicked)))))%, (40.00 + (35.00 x (Real((Level of Grow for GrowPicked)))))%) of its original size
              • Set GrowPicked = No unit
            • Else - Actions
Contents

Tiny By Storm_hih (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. 22nd July 2012 Magtheridon96: In addition to Pharaoh_'s comments: Set TossPlayer = (Player group((Owner of TossU[TossCount]))) Cinematic - Clear the screen of text messages for...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

22nd July 2012
Magtheridon96:

In addition to Pharaoh_'s comments:


    • Set TossPlayer = (Player group((Owner of TossU[TossCount])))
      • Cinematic - Clear the screen of text messages for TossPlayer
      • Game - Display to TossPlayer for 8.00 seconds the text: ...
      • Player Group - Pick every player in TossPlayer and do (Actions)
      • Loop - Actions
      • Custom script: if GetLocalPlayer() == GetEnumPlayer() then
      • Sound - Play Error <gen>
      • Custom script: endif
      • Custom script: call DestroyForce (udg_TossPlayer)
    There's a better way to do this, but you can only do it with custom scripts, so.. here you go:
    • Custom script: set udg_ErrorText = "INSERT_YOUR_TEXT_HERE"
    • Custom script: set udg_TossPlayer = GetOwningPlayer(udg_TossU[udg_TossCount])
    • Custom script: if GetLocalPlayer() == udg_TossPlayer then
    • Custom script: call ClearTextMessages()
    • Custom script: call DisplayTimedTextToPlayer(udg_TossPlayer, 0, 0, 8, udg_ErrorText)
    • Sound - Play Error <gen>
    • Custom script: endif
    ErrorText is a string and TossPlayer is a Player, not a Player group.
  • Since you're already setting the triggering unit in a variable, why not use that variable rather than repeating the call.
  • The above point applies to all the other trigger actions. (It's better to cache
    things like (Last created unit), (Triggering unit), (Triggering player), etc... into variables rather than repeating the calls.)
  • There should be some form of configuration here. Right now, all the spells are hard-coded.
  • When you're picking destructables, you're leaking a region.
  • You don't need to null global variables. Like at all.
  • Currently, your spell can destroy bridges. You need to make a dummy peasant unit that is ordered to harvest the
    destructables. After ordering him to do so, if his current order is "harvest", then the destructable is in fact a tree.
  • Your "Clear" trigger could totally bug up a game. You shouldn't be using Peasants as dynamic dummy casters in the first place.
  • Check out this. Your Hard Skin ability should use this
    damage detection system's Damage event rather than using the attack event.
  • When you set the size of a unit, the last two values could be 0 and it wouldn't matter, because you can't stretch a unit.
  • The Grow trigger modifies the units movement speed which can conflict with a lot of systems the user might be using :/
    • Unit - Create 1 Peasant for (Owner of (Attacked unit)) at (Position of (Attacked unit)) facing Default building facing degrees
    ^Location leak. Use SkinPoint instead of the (Position ...) call.
  • You shouldn't add and remove the crow form ability, use this method instead.

This indeed needs heavy modifications.

05:14, 22nd May 2012
Pharaoh_: The triggers could be shorter, by using calculations and not a bunch of if/then/else. Use custom integers and not Integer A. Do not use waits. There is no configurability whatsoever. Unit is attacked is an abuseable event. Triggering unit > Dying unit. Certain location variables don't need an array, use separate ones instead. Store values in a variable, before calling them repeatedly, such as (Picked unit).

Do not reupload the spellpack, update it instead. I will delete your previous one. If you still want my review from that one, make sure to leave me a visitor message.

Needs heavy modifications. Rejected.
 
Level 12
Joined
Apr 28, 2012
Messages
166
Told you its not Hard Skin,it is Craggy Exterior
And Avalanche has no triggers needed,you have to use cluster rockets and change the missile model
GEEZ
i have a question where did you get that model?

Avalanche need the dummy because of the channeling.

First, remove imported model...

Second, USE UPDATE BUTTON to update this: http://www.hiveworkshop.com/forums/spells-569/tiny-stone-giant-spells-v1-0-a-216259/

Don't reupload a spell...

1.I didn't import any models the model i have replaced it with the local files in my war3.

2.next time i will do it.
 
Last edited by a moderator:
Level 13
Joined
Jun 9, 2009
Messages
1,129
Iconer, you'll get your self banned like that. Rules are rules.
Second, at least learn English before flaming around.
For some reason I think Storm_hih made this for you, because you defend him like he is your little brother.
@Storm_hih Nothing much to add, just do what pharaoh_ told you.
 
Top