Jump to content

Portal status


Recommended Posts

Hi,

is there an easier way to get the "status" of the portal apart than something like:

    local state = 0
    for k,v in pairs(Ents) do
        if v.prefab == "multiplayer_portal" then
            state = 1
            break
        elseif v.prefab == "multiplayer_portal_moonrock_constr_plans" then
            state = 2
            break        
        elseif v.prefab == "multiplayer_portal_moonrock" then
            state = 3
            break
        end
    end


Basically I want to get the prefab of the portal's status at any given time. Edited by cezarica
Link to comment
Share on other sites

Your code looks fine. I think there's not really be the way to improve it.
I believe multiplayer_portal is not the 'registered(into TheWorld)' prefab.
So I assume that finding the portal via Ents is inevitable.


Here's my expression. There's not a big change but Tag finding is a bit faster.

local function GetPortalState()
    local portal
    for k,v in pairs(Ents) do
        if v:HasTag("multiplayer_portal") then
            portal = v
            break
        end
    end

    if portal ~= nil then
        if portal:HasTag("constructionsite") then
            return 2
        elseif portal:HasTag("moontrader") then
            return 3
        else
            return 1
        end
    end
    return 0
end

 

Link to comment
Share on other sites

Hi, thanks for your reply. I wanted to get the prefab name because I was actually aiming to get it's position in the world, and thanks to your input I changed my previous code (not the one posted above) to:

local function GetPortalPosition()
    local coords = nil
    for k,v in pairs(Ents) do
        if v:HasTag("multiplayer_portal") or v:HasTag("constructionsite") or v:HasTag("moontrader") then
            coords = Point(v.Transform:GetWorldPosition())
            break
        end
    end
    return coords
end

Tested it and works as expected! Thanks! :)

Now I have to figure out how to store the 'coords' into a global variable so I can access it later from another function where I could be able to read and rewrite it. Any idea how to do that?

Edit: Never mind, I figured out. Having a local coords = {} outside any functions did the trick. Happy dance! :)

Edited by cezarica
Link to comment
Share on other sites

for k,v in pairs(Ents) do
  if v:HasTag("multiplayer_portal") or v:HasTag("constructionsite") or v:HasTag("moontrader") then
    return Point(v.Transform:GetWorldPosition())
  end
end

This would be enough.
If there's no return in Lua's function, will consider as nil.

Edited by YakumoYukari
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
  • Create New...