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

[Mapping] WoW Mount System for Semi-N00b

Level 17
Joined
Dec 11, 2014
Messages
2,004
Mounts
Arad MNK's Mount System



Introduction

What are Mounts in WoW?

Mounts are Some Mobs which spawn and after a Walk, they despawn. sometimes they are earned by some Special quests or Achieved by an Item. In This tutorial, it will be Bondstone. also, in this tutorial, you may only have 1 Mount.

Requirements


Requirements

Basic Knowledge of Variables, Trigger Editor and Object Editor.
Part I
Part I: Setting up The Unit, Abilities and Model.

First, Go to OE and Base the Unit on Stag.
Then, Select Custom Unit and Set the Name to Whatever you want.
In this Case, I named it
''Horse''.


attachment.php


Now You see the Mount on the Left side of OE.
You May Want to Change the Model and Icon of the Mount. If you Couldn't Find a fitting one, try Importing One! in this case, I'll use ''Riderless Horse''.



attachment.php

Done!

attachment.php




Now, The Unit is Ready Itself. If you Like, you can Add Combat Possiblities Or add more health to it. (Default 15)Now, We Go to the
Ability Category, So we Could Edit the Mounting Ability. Head to Special.
attachment.php



Find
Load (Goblin Zeppelin) and Then Hit New Ability and Name it Load.
NOTE: USING SHIPS LOAD MIGHT CAUSE WEIRD LOAD THINGS.


attachment.php



Then Find Text ->Editor Suffix . Change it to (Mounts).

attachment.php




Do the Same with
''Cargo Hold (Goblin Zeppelin)'' and ''Unload (Air Transports).
Then, Edit Cargo Hold With: Data -> Cargo Capacity
Change it to 1.

attachment.php


Then, Head back to Category Units, and give the Mount The Abilities you Just Edited + Cargo Hold Death (Neutral Hostile).

attachment.php


Now we Have to create an item: Bondstone (Name it whatever you like)
Base it from whatever you like. I Will use:
Wirt's Other Leg.
Put A Fitting Description, Icon, Cost and Stock Interval. The Result will be Close to the Picture.
IMPORTANT NOTE: Change the Stats -> Actively used to True!

attachment.php


Then, you will have to create an Ability. Base it on Shadow Strike and create another buff named ''Bond'' and put a Fitting Description, and Icon. Don't forget to Change the Ability Damage (0), Level (1),Buff (Bond), check the item ability and uncheck hero ability.

attachment.php


attachment.php


Then give the Item The Ability.


Now, Our Unit and Item are ready!!! Now, Time for triggers...

Part II

Part II: Variables and Triggers

Variables Needed:
Horse (Name it Whatever you Want) Of Type Unit array
Integer_Horse (Name it Whatever you want again) Of Type Integer
Temp_Point Of Type Point
Player_Has_Mount Of Type Boolean
Player_Has_Mount Of Type Boolean Array
Temp_Unit Of Type Unit
Point_HorseDespawn Of Type Point



Regions Needed:

Horse Spawn
Horse Despawn


And Now, Triggers start.
  • Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set Point_HorseDespawn = (Center of Horse Despawn <gen>)
  • Horse Spawn
    • Events
      • Time - Every 45.00 seconds of game time
    • Conditions
    • Actions
      • -------- Checks if there is any Horse on the Map --------
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • (Horse[Integer_Horse] is alive) Equal to (==) True
          • Then - Actions
            • -------- Removing It --------
            • Unit - Remove Horse[Integer_Horse] from the game
            • -------- --------
            • -------- Sets the Unit Variable to Null so there wouldn't be leaks. --------
            • Set Horse[Integer_Horse] = No unit
            • -------- --------
          • Else - Actions
            • Do nothing
      • -------- These Integers are Used to make the Mounts MUI --------
      • Set Integer_Horse = (Integer_Horse + 1)
      • -------- --------
      • -------- Setting Temp_Point to avoid leaks --------
      • Set Temp_Point = (Center of Horse Spawn <gen>)
      • -------- --------
      • -------- Creating a Horse --------
      • Unit - Create 1 Horse for Neutral Passive at Temp_Point facing Default building facing (270.0) degrees
      • -------- --------
      • -------- Storing the horse into a Variable --------
      • Set Horse[Integer_Horse] = (Last created unit)
      • -------- --------
      • -------- Slowing the Movement Of Horse --------
      • Unit - Set Horse[Integer_Horse] movement speed to 150.00
      • -------- --------
      • -------- a Special Effect to make it look better --------
      • Special Effect - Create a special effect at Temp_Point using Abilities\Spells\Other\Charm\CharmTarget.mdl
      • -------- --------
      • -------- Destroying it --------
      • Special Effect - Destroy (Last created special effect)
      • -------- --------
      • -------- Removing the Location to Avoid Possible Leaks --------
      • Custom script: call RemoveLocation(udg_Temp_Point)
      • -------- --------
      • -------- Ordering The Horse to Move --------
      • Unit - Order Horse[Integer_Horse] to Move To Point_HorseDespawn
      • -------- --------
  • Horse Going
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Ordering The Horse to Move --------
      • Unit - Order Horse[Integer_Horse] to Move To Point_HorseDespawn
      • -------- --------
  • Horse Catching
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to (==) Bondstone Bonding Power
      • (Target unit of ability being cast) Equal to (==) Horse[Integer_Horse]
    • Actions
      • -------- Storing the Caster into a Varable --------
      • Set Temp_Unit = (Triggering unit)
      • -------- --------
      • -------- Checks if the Caster has a Mount --------
      • -------- --------
        • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          • If - Conditions
            • Player_Has_Mount[(Player number of (Owner of Temp_Unit))] Equal to (==) False
          • Then - Actions
            • -------- This Makes the Caster own The Mount --------
            • Unit - Change ownership of Horse[Integer_Horse] to (Owner of Temp_Unit) and Change color
            • -------- --------
            • -------- Gives a High Speed to the Horse --------
            • Unit - Set Horse[Integer_Horse] movement speed to 300.00
            • -------- --------
            • -------- Sets the Unit Variable to Null so there wouldn't be leaks. --------
            • Set Horse[Integer_Horse] = No unit
            • -------- --------
            • -------- This Makes the Players don't have more than 1 mount --------
            • Set Player_Has_Mount[(Player number of (Owner of Temp_Unit))] = True
            • -------- --------
            • -------- Takes the Bondstone --------
            • Item - Remove (Item carried by Temp_Unit of type Bondstone)
            • -------- --------
            • -------- Says Officially --------
            • Game - Display to (All players) the text: ((Name of (Owner of Temp_Unit)) + Has catched the Mount: Horse)
            • -------- --------
            • -------- Setting Temp_Unit to Null so there wouldn't be leaks --------
            • Set Temp_Unit = No unit
            • -------- --------
          • Else - Actions
            • -------- Warns the Player --------
            • Game - Display to (Player group((Owner of Temp_Unit))) the text: You already have a ...
            • -------- --------
            • -------- Takes the Bondstone --------
            • Item - Remove (Item carried by Temp_Unit of type Bondstone)
            • -------- --------
            • -------- Setting Temp_Unit to Null so there wouldn't be leaks --------
            • Set Temp_Unit = No unit
            • -------- --------
  • Mount Death
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to (==) Horse
      • (Owner of (Triggering unit)) Not equal to (!=) Neutral Passive
    • Actions
      • -------- Makes the Player have Mount --------
      • Set Player_Has_Mount[(Player number of (Owner of (Triggering unit)))] = False
      • -------- --------
  • Horse Despawn
    • Events
      • Unit - A unit enters Horse Despawn <gen>
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to (==) Horse
      • (Owner of (Triggering unit)) Equal to (==) Neutral Passive
    • Actions
      • -------- Setting Temp_Point to avoid leaks --------
      • Set Temp_Point = (Center of Horse Despawn <gen>)
      • -------- --------
      • -------- a Special Effect to make it look better --------
      • Special Effect - Create a special effect at Temp_Point using Abilities\Spells\Other\Charm\CharmTarget.mdl
      • -------- --------
      • -------- Destroying it --------
      • Special Effect - Destroy (Last created special effect)
      • -------- --------
      • -------- Removing the Location to Avoid Possible Leaks --------
      • Custom script: call RemoveLocation(udg_Temp_Point)
      • -------- --------
      • -------- Removing The Horse --------
      • Unit - Remove Horse[Integer_Horse] from the game
      • -------- --------
      • -------- Sets the Unit Variable to Null so there wouldn't be leaks. --------
      • Set Horse[Integer_Horse] = No unit
      • -------- --------
      • -------- Says Officially --------
      • Game - Display to (All players) the text: Horse has despawned...
      • -------- --------
Credits

Credits:

Venger07: Some Help with my system
Blizzard Entertaiment: For making Warcraft 3 and it's World Editor
ACDSee Pro: I Used it to Edit the Pictures
Snipping Tool: My clipboard Didn't work, so I Used this.
JassNewGenPack: I Used it
 

Attachments

  • OE 01.PNG
    OE 01.PNG
    334.6 KB · Views: 561
  • OE 2.PNG
    OE 2.PNG
    137.8 KB · Views: 590
  • OE 3.PNG
    OE 3.PNG
    131 KB · Views: 521
  • OE 4.PNG
    OE 4.PNG
    137.1 KB · Views: 512
  • OE 5.PNG
    OE 5.PNG
    154 KB · Views: 533
  • OE 6.PNG
    OE 6.PNG
    140.2 KB · Views: 568
  • OE 7.PNG
    OE 7.PNG
    121.9 KB · Views: 561
  • OE 8.PNG
    OE 8.PNG
    130 KB · Views: 471
  • OE 10.PNG
    OE 10.PNG
    86.5 KB · Views: 469
  • OE 11.PNG
    OE 11.PNG
    85.9 KB · Views: 488
  • OE 9.PNG
    OE 9.PNG
    153.3 KB · Views: 545
  • Mount System By AMNK.w3x
    37.8 KB · Views: 139
Last edited:
Level 15
Joined
Nov 30, 2007
Messages
1,202
if you have a variable to store TriggeringUnit() it would be slightly more efficient. Basically anything you call repeated times is preferably placed in a temporarily variable.

TriggeringPlayer
TriggerUnit
etc

So declare this before all you have right now:
  • Set tempUnit = (Triggering unit)
and replace every part where you have TriggeringUnit with tempUnit.

My memory don't serve me well, but I think you have to destroy special effects to prevent leaks.
___________

You've done a great you on the layout of the tutorial, except for the images not working. ^^
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,183
Good things:
Neat layout and good use of colors that doesn't hurt the eyes.
Pictures

Bad things:
The pictures are broken and can't be viewed. If the images are from one of your albums make sure it's public and not private.
There are quite a few minor triggering mistakes.
  • Game - Display to (All players matching ((Matching player) Equal to (==) (Owner of (Triggering unit)))) the text: You already have a
should be
  • Game - Display to (Owner of (Triggering unit)) the text: You already have a
  • Temp_Point = (Center of Horse Despawn <gen>)
If you're going so store the same location into a variable every seconds it's better to set the location at an init trigger and don't destroy the location, ever.

In the horse catching trigger you should use a variable for triggering unit since you use it multiple times.

The special effect can be stored into an variable at init to gain some speed and increase readability.

  • Unit - Remove Horse[Integer_Horse] from the game
leaks

AND PLEASE DON'T POST TRIGGER WITH COMMENTS IN! IT LOOKS UGLY! *end of rage*
 
Level 17
Joined
Dec 11, 2014
Messages
2,004
the pictures aren't showing m8

if you have a variable to store TriggeringUnit() it would be slightly more efficient. Basically anything you call repeated times is preferably placed in a temporarily variable.

TriggeringPlayer
TriggerUnit
etc

So declare this before all you have right now:
  • Set tempUnit = (Triggering unit)
and replace every part where you have TriggeringUnit with tempUnit.

My memory don't serve me well, but I think you have to destroy special effects to prevent leaks.
___________

You've done a great you on the layout of the tutorial, except for the images not working. ^^

Good things:
Neat layout and good use of colors that doesn't hurt the eyes.
Pictures

Bad things:
The pictures are broken and can't be viewed. If the images are from one of your albums make sure it's public and not private.
There are quite a few minor triggering mistakes.
  • Game - Display to (All players matching ((Matching player) Equal to (==) (Owner of (Triggering unit)))) the text: You already have a
should be
  • Game - Display to (Owner of (Triggering unit)) the text: You already have a
  • Temp_Point = (Center of Horse Despawn <gen>)
If you're going so store the same location into a variable every seconds it's better to set the location at an init trigger and don't destroy the location, ever.

In the horse catching trigger you should use a variable for triggering unit since you use it multiple times.

The special effect can be stored into an variable at init to gain some speed and increase readability.

  • Unit - Remove Horse[Integer_Horse] from the game
leaks

AND PLEASE DON'T POST TRIGGER WITH COMMENTS IN! IT LOOKS UGLY! *end of rage*


Thanks for the feedback, Duke, Pinzu and Chaosy! Gonna Fix These Tomorrow. (Like 6AM GMT)

AND PLEASE DON'T POST TRIGGER WITH COMMENTS IN! IT LOOKS UGLY! *end of rage*

Read the Title: ''WoW Mount System for Semi-n00b'', it means all triggers must be Defined as this is a Tutorial Fitting for the N00bs, Not Experts.



You've done a great you on the layout of the tutorial, except for the images not working. ^^

Thanks ^^! Gonna Fix the Images, just found out why it doesn't show for others. (Attachments again...)

Edit: Done!
 
Last edited:
This is a neat approach to mounts. But I do have a couple of issues with the tutorial:
  • Having too many colors and too many fonts is distracting. See this link:
    http://www.hiveworkshop.com/forums/...t-tutorial-please-read-before-posting-119320/
    So you should stick to the regular font, regular colors, and just use one special color (not something too vibrant) for headings or for emphasis.
  • This doesn't really seem to be like WoW. I expected it to be something where you have an ability or an item that summons a mount. You can probably rename the tutorial to just "A Mount System".
  • With tutorials, it is better to teach a variety of approaches to tackle a particular problem. If you have too specific of an implementation, then it is less likely that the tutorial will be useful. In this case, you have a "mount catching system". It will only be useful to those who want to implement that exact system. But I personally haven't heard of it before (don't get me wrong, it is a cool idea), but I feel like this tutorial could be expanded so it would be useful for anyone looking for mount implementations.
  • For the text in the tutorial, you should only use capitalization at the start of a sentence or for the highlighted parts.

The tutorial is decent so far and the test map is fine. But to summarize my point above, it feels a lot more like a system rather than a tutorial (it has good explanations, but the implementation is very specific).
 
Level 17
Joined
Dec 11, 2014
Messages
2,004
This is a neat approach to mounts. But I do have a couple of issues with the tutorial:
  • Having too many colors and too many fonts is distracting. See this link:
    http://www.hiveworkshop.com/forums/...t-tutorial-please-read-before-posting-119320/
    So you should stick to the regular font, regular colors, and just use one special color (not something too vibrant) for headings or for emphasis.
  • This doesn't really seem to be like WoW. I expected it to be something where you have an ability or an item that summons a mount. You can probably rename the tutorial to just "A Mount System".
  • With tutorials, it is better to teach a variety of approaches to tackle a particular problem. If you have too specific of an implementation, then it is less likely that the tutorial will be useful. In this case, you have a "mount catching system". It will only be useful to those who want to implement that exact system. But I personally haven't heard of it before (don't get me wrong, it is a cool idea), but I feel like this tutorial could be expanded so it would be useful for anyone looking for mount implementations.
  • For the text in the tutorial, you should only use capitalization at the start of a sentence or for the highlighted parts.

The tutorial is decent so far and the test map is fine. But to summarize my point above, it feels a lot more like a system rather than a tutorial (it has good explanations, but the implementation is very specific).

Thanks for your Detailed Review. I'll try to do whatever you said.
 
Top