Tutorial How to make teleporters - the best way

Discussion in 'Dota 2 Editor Help' started by Sim, Aug 24, 2014.

  1. Sim

    Sim Forum Administrator Staff Member

    +529 / 0 / -0

    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:


    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:


    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:


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

    -- variables
    --                        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.
        print (trigger.caller:GetName())
        print ("Teleported!")
        SendToConsole("dota_camera_center") -- Camera has to follow otherwise, the player might be lost.

    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!

Share This Page