How to make teleporters - the best way

Sim

Forum Administrator
Staff member
Reaction score
534
Greetings,

There are 2 ways to make teleporters in the Dota 2 Workshop Tools. Both involve a mesh entity, however, one is manually triggered, while the other is a pre-fabricated script.

Note: This tutorial supposes that you know your way around the editor a bit, like where's what.

The first method involves using a mesh entity and give it the "trigger_teleport" class. However, there is a much better solution involving scripts, so we're going to use that one instead.

1. Creating the mesh entity

Select the Block tool (Shift + B) and create a rectangular-shaped block. This is the entrance. Its size should correspond to the region in which your unit will go through in order to be teleported. Here is an example:

MakingATriggerBlock.jpg

Next, go into the "Active Material" panel in the bottom-left corner, and select browse. Type in "trigger" in the search box and double-click on the toolstrigger.vmat material. It should apply it to your block. If it doesn't, drag and drop it unto your block.

Next, in Object Properties, select the class "trigger_hero", and set the following values:

Name - name_of_teleporter
Entity Scripts - name_of_lua_file.lua

Next, double-click on the trigger block, go into "Outputs", and fill in the fields with

My output named - OnStartTouch
Target Entities named - name_of_teleporter
Via this input - CallScriptFunction
With a parameter override of - name_of_function
After a delay of - 0 second

Simply put, you are telling the editor what to do with your trigger block. The target entity is not the exit of the teleporter, but the entrance. Here is an example of what to do:

ObjectProperties.jpg
ObjectProperties2.jpg

Next, what we need is an exit for your unit. Create another trigger block (Shift + B), give it a name, and we're done with the Editor.

Now, for the fun part, we need a script to actually teleport our units. That's where LUA comes in handy.

In case you don't know how or where to create your file, it has to be located there:

LocationOfLuaFile.jpg

Create a new text file there named "teleporters.lua"
This is what your file should include as text:

JASS:
-- variables
TELEPORTERS = {
--                        entrance_name = "exit_name"
--            example:    teleport_southeast = "southeast_exit",
                        teleport_southwest = "southwest_exit"  
--            Remember to always put a , between lines, but not on the last line
                }

function Teleport_Hero(trigger)
    -- Find the respective exit to every entrance
    local point = Entities:FindByName( nil, TELEPORTERS[trigger.caller:GetName()] ):GetAbsOrigin()
    -- Teleport the unit
    FindClearSpaceForUnit(trigger.activator, point, false)
    -- Stop the unit or else, it might move around after being teleported.
    trigger.activator:Stop()
--[[
    print (trigger.caller:GetName())
    print ("Teleported!")
--]]
    SendToConsole("dota_camera_center") -- Camera has to follow otherwise, the player might be lost.
end

As long as your entrances and exits are named properly, every time you add a new teleporter, just add it in the global variables at the top and the function will take care of the rest. Done!
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top