• 🏆 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!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

[Lua] Correct way of use load?

Status
Not open for further replies.
Level 24
Joined
Jun 26, 2020
Messages
1,853
I'm making TPs but as they are practically the same thing when coding and to make easier to configure later I opted to use the function load, the problem is I don't know how to do it correctly, this is what I do:

Lua:
do
    function Teleport(enterRect, leaveRect, enterTP, leaveTP, enterText, leaveText)
        load(
            "local enterRect = ".. enterRect .." ---@type rect\n"..
            "local leaveRect = ".. leaveRect .." ---@type rect\n"..
            "local enterTP = GetRectCenter(".. enterTP ..") ---@type location\n"..
            "local leaveTP = GetRectCenter(".. leaveTP ..") ---@type location\n"..
            "\n"..
            "-- Enter\n"..
            "local t = CreateTrigger()\n"..
            "TriggerRegisterEnterRectSimple(t, enterRect)\n"..
            "TriggerAddAction(t, function ()\n"..
                "SetUnitPositionLoc(GetEnteringUnit(), enterTP)\n"..
                "DisplayTimedTextToPlayer(GetOwningPlayer(GetEnteringUnit()), 0, 0, 5., '|cffffff00[\"".. enterText .."\"]|r')\n"..
            "end)\n"..
            "\n"..
            "-- Leave\n"..
            "t = CreateTrigger()\n"..
            "TriggerRegisterEnterRectSimple(t, leaveRect)\n"..
            "TriggerAddAction(t, function ()\n"..
            "    SetUnitPositionLoc(GetEnteringUnit(), leaveTP)\n"..
            "    DisplayTimedTextToPlayer(GetOwningPlayer(GetEnteringUnit()), 0, 0, 5., '|cffffff00[\"".. leaveText .."\"]|r')\n"..
            "end)\n"
        )
    end
end
So when I call this:

Lua:
OnMapInit(function ()
    Teleport("gg_rct_Jijimon_House_Outside",
        "gg_rct_Jijimon_House_Inside",
        "gg_rct_JijimonTP_inside",
        "gg_rct_JijimonTP_outside",
        "Jijimon's House",
        "File City")
end)
The result should be:

Lua:
OnMapInit(function ()
    local enterRect = gg_rct_Jijimon_House_Outside ---@type rect
    local leaveRect = gg_rct_Jijimon_House_Inside ---@type rect
    local enterTP = GetRectCenter(gg_rct_JijimonTP_inside) ---@type location
    local leaveTP = GetRectCenter(gg_rct_JijimonTP_outside) ---@type location

    -- Enter
    local t = CreateTrigger()
    TriggerRegisterEnterRectSimple(t, enterRect)
    TriggerAddAction(t, function ()
        SetUnitPositionLoc(GetEnteringUnit(), enterTP)
        DisplayTimedTextToPlayer(GetOwningPlayer(GetEnteringUnit()), 0, 0, 5., "|cffffff00[Jijimon's House]|r")
    end)

    -- Leave
    t = CreateTrigger()
    TriggerRegisterEnterRectSimple(t, leaveRect)
    TriggerAddAction(t, function ()
        SetUnitPositionLoc(GetEnteringUnit(), leaveTP)
        DisplayTimedTextToPlayer(GetOwningPlayer(GetEnteringUnit()), 0, 0, 5., "|cffffff00[File City]|r")
    end)

end)
But is not working, the map doesn't even run, what did I do wrong?

Edit: I forgot import the Global Initialization, so that's why the map didn't run, but I will still appreciate feedback.
 
Last edited:
you need to call the function load creates.
load( whatever )()

When your map does not run (can't be started) and shows an error popup in the game, then check the logfile users\user\Documents\Warcraft III\Logs\War3Log.txt. It might tell you why.

Example, error message in the logfile:
5/27 08:48:20.487 Map contains invalid Jass scripts that couldn't be compiled by war3, file: war3map.lua, error: attempt to call a nil value (global 'DasHaus')
 
Level 24
Joined
Jun 26, 2020
Messages
1,853
When your map does not run (can't be started) and shows an error popup in the game, then check the logfile users\user\Documents\Warcraft III\Logs\War3Log.txt. It might tell you why.

Example, error message in the logfile:
5/27 08:48:20.487 Map contains invalid Jass scripts that couldn't be compiled by war3, file: war3map.lua, error: attempt to call a nil value (global 'DasHaus')
Thank you for the tip.
you need to call the function load creates.
load( whatever )()
I tried that and didn't work, maybe I wrote something bad.
 
Status
Not open for further replies.
Top