Jump to content

[Help] Adding night vision to custom helmet


Recommended Posts

Have a great day, reader!

I would like to ask for a little help about the following situation: I found this coding about custom night vision for Don't Starve singleplayer:

Spoiler

local light = inst.entity:AddLight()
    light:SetFalloff(0.2)
    light:SetIntensity(0.9)
    light:SetRadius(6.0)
    light:SetColour(RRR/255, GGG/255, BBB/255)
    light:Enable(false)
    inst:AddTag("sight_off")
    local function NightVision(inst)
        if GetClock() and GetWorld() then
            if GetClock():IsDay() and inst:HasTag("sight_on") and not GetWorld():IsCave() or
                GetClock():IsDusk() and inst:HasTag("sight_on") and not GetWorld():IsCave() then
                light:Enable(false)
                inst:AddTag("sight_off")
                inst:RemoveTag("sight_on")
            end
            if GetClock():IsNight() and inst:HasTag("sight_off") or 
                GetWorld():IsCave() and inst:HasTag("sight_off") then
                light:Enable(true)
                inst:AddTag("sight_on")
                inst:RemoveTag("sight_off")
            end
        end
    end
    inst:DoPeriodicTask( 0.0, function(inst)
        NightVision(inst)
    end)

My question is: If there's a way, how can this coding be transformed to be DST compatible, and to make it fit into a custom hat's prefab file (so the wearer gains the vision)?

I'm incredibly grateful for any tiny help :D

Edited by BillTheCipher
Link to comment
Share on other sites

It's much easier here in DST.

In your item's equippable's OnEquip:

owner.components.playervision:ForceNightVision(true)
owner.components.playervision:SetCustomCCTable({})

You can set the custom colour cube table to something else if you want some display effect like Woodie's sepia tone or moggles/etc.

Then with OnUnequip:

owner.components.playervision:ForceNightVision(false)
owner.components.playervision:SetCustomCCTable(nil)

 

  • Thanks 1
Link to comment
Share on other sites

@CarlZalph Thanks for the info! :love_heart:

How can I get more informations about the colour cube tables?

 

Edit:

I've tried the codings. I might have messed up something, but they don't seem to work.

Neither this way:

Spoiler

 

local function OnEquip(inst, owner) 
        owner.AnimState:OverrideSymbol("swap_hat", "vrhead", "swap_hat")
        owner.AnimState:Show("HAT")
        owner.AnimState:Show("HAT_HAIR")
        owner.AnimState:Hide("HAIR_NOHAT")
        owner.AnimState:Hide("HAIR")
        owner.components.playervision:ForceNightVision(true)
        owner.components.playervision:SetCustomCCTable({})
        print('A')
        if owner:HasTag("player") then
            print('B')
            owner.AnimState:Hide("HEADBASE")
            owner.AnimState:Show("HEADBASE_HAT")
        end
end

local function OnUnequip(inst, owner) 
        owner.AnimState:Hide("HAT")
        owner.AnimState:Hide("HAT_HAIR")
        owner.AnimState:Show("HAIR_NOHAT")
        owner.AnimState:Show("HAIR")
        owner.components.playervision:ForceNightVision(false)
        owner.components.playervision:SetCustomCCTable(nil)
    
        if owner:HasTag("player") then
            owner.AnimState:Show("HEADBASE")
            owner.AnimState:Hide("HEADBASE_HAT")
        end
end

 

or this way:

Spoiler

 

local function OnEquip(inst, owner) 
        owner.AnimState:OverrideSymbol("swap_hat", "vrhead", "swap_hat")
        owner.AnimState:Show("HAT")
        owner.AnimState:Show("HAT_HAIR")
        owner.AnimState:Hide("HAIR_NOHAT")
        owner.AnimState:Hide("HAIR")

        print('A')
        if owner:HasTag("player") then
            print('B')
            owner.AnimState:Hide("HEADBASE")
            owner.AnimState:Show("HEADBASE_HAT")
        end
        
    owner.components.playervision:ForceNightVision(true)
    owner.components.playervision:SetCustomCCTable({})
end

local function OnUnequip(inst, owner) 
        owner.AnimState:Hide("HAT")
        owner.AnimState:Hide("HAT_HAIR")
        owner.AnimState:Show("HAIR_NOHAT")
        owner.AnimState:Show("HAIR")

        if owner:HasTag("player") then
            owner.AnimState:Show("HEADBASE")
            owner.AnimState:Hide("HEADBASE_HAT")
        end
        
    owner.components.playervision:ForceNightVision(false)
    owner.components.playervision:SetCustomCCTable(nil)
end

 

 

Edited by BillTheCipher
Link to comment
Share on other sites

2 hours ago, BillTheCipher said:

@CarlZalph Thanks for the info! :love_heart:

How can I get more informations about the colour cube tables?

 

Edit:

I've tried the codings. I might have messed up something, but they don't seem to work.

Neither this way:

  Hide contents

 

local function OnEquip(inst, owner) 
        owner.AnimState:OverrideSymbol("swap_hat", "vrhead", "swap_hat")
        owner.AnimState:Show("HAT")
        owner.AnimState:Show("HAT_HAIR")
        owner.AnimState:Hide("HAIR_NOHAT")
        owner.AnimState:Hide("HAIR")
        owner.components.playervision:ForceNightVision(true)
        owner.components.playervision:SetCustomCCTable({})
        print('A')
        if owner:HasTag("player") then
            print('B')
            owner.AnimState:Hide("HEADBASE")
            owner.AnimState:Show("HEADBASE_HAT")
        end
end

local function OnUnequip(inst, owner) 
        owner.AnimState:Hide("HAT")
        owner.AnimState:Hide("HAT_HAIR")
        owner.AnimState:Show("HAIR_NOHAT")
        owner.AnimState:Show("HAIR")
        owner.components.playervision:ForceNightVision(false)
        owner.components.playervision:SetCustomCCTable(nil)
    
        if owner:HasTag("player") then
            owner.AnimState:Show("HEADBASE")
            owner.AnimState:Hide("HEADBASE_HAT")
        end
end

 

or this way:

  Hide contents

 

local function OnEquip(inst, owner) 
        owner.AnimState:OverrideSymbol("swap_hat", "vrhead", "swap_hat")
        owner.AnimState:Show("HAT")
        owner.AnimState:Show("HAT_HAIR")
        owner.AnimState:Hide("HAIR_NOHAT")
        owner.AnimState:Hide("HAIR")

        print('A')
        if owner:HasTag("player") then
            print('B')
            owner.AnimState:Hide("HEADBASE")
            owner.AnimState:Show("HEADBASE_HAT")
        end
        
    owner.components.playervision:ForceNightVision(true)
    owner.components.playervision:SetCustomCCTable({})
end

local function OnUnequip(inst, owner) 
        owner.AnimState:Hide("HAT")
        owner.AnimState:Hide("HAT_HAIR")
        owner.AnimState:Show("HAIR_NOHAT")
        owner.AnimState:Show("HAIR")

        if owner:HasTag("player") then
            owner.AnimState:Show("HEADBASE")
            owner.AnimState:Hide("HEADBASE_HAT")
        end
        
    owner.components.playervision:ForceNightVision(false)
    owner.components.playervision:SetCustomCCTable(nil)
end

 

 

What exactly isn't working? I have recent experience with getting night vision working on an item like this, if you're having a similar problem that I was having, try seeing if Charlie will attack your character while the night vision would be applied. There's a chance it's only taking effect on the server side, and I can help you fix that.

Link to comment
Share on other sites

35 minutes ago, BillTheCipher said:

@TheSkylarr When I equip the headwear, the character just wears it without the night vision. Charlie still damages the character :(

That's... really weird. Are you absolutely sure the code is actually running? I sometimes accidentally load the workshop version of my mod instead of the dev version for example, which is different code.

Only reason I can think of for nightvision not working when called is if something else is CONSTANTLY forcing it back off again, but as far as I know, the only thing in the entire vanilla game that uses ForceNightVision is Woodie's transformation, which I hope you aren't using to test it lol.

Edit: I tested your code on one of my own hats from my mod, it seems to grant Night Vision correctly, so now I am ultra confused as to why it's not working for you.

Edited by TheSkylarr
Link to comment
Share on other sites

Just now, BillTheCipher said:

@TheSkylarr I've double checked everything, I feel sillier and sillier :apathy:

I updated the whole mod here:

LeVR.rar 11.5 MB · 0 downloads

I'm taking a look right now, I'll reply again if I figure anything out.

@BillTheCipher After testing your code, the only edits I made were to enable normal characters to wear the headset, it seems to grant the nightvision correctly in the local world, and only server side in a multiplayer setting. I can help fix the problem with multiplayer, but charlie shouldn't be able to hit you if that's the case regardless.

  • Like 1
Link to comment
Share on other sites

4 hours ago, BillTheCipher said:

@TheSkylarr So, if I understand it right, the headset can only provide night vision if the tag requirement is erased?

Well, I don't think it was because of that, though you could give it a try. I believe you should fully restart your game if you haven't already and give it a try in a local world, that is a world without caves set to 1 max player. If it works there, let me know, as well as check the tag requirement thing. It really shouldn't be that though.

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...