Jump to content

Recommended Posts

In SGWilson Wigfried has her own section for singing which is (not sure if in the latest updates it is still the same so I would be checking for it in your game's SGWilson, in case you want to make sure)

 -- Wigfrid

    State{
        name = "sing_pre",
        tags = { "busy", "nointerrupt", "keep_pocket_rummage" },

        onenter = function(inst)
            inst.components.locomotor:Stop()

            inst.AnimState:PlayAnimation("sing_pre", false)
        end,

        events = {
            EventHandler("animover", function(inst)
                if inst.AnimState:AnimDone() then

                    local buffaction = inst:GetBufferedAction()
                    local songdata = buffaction and buffaction.invobject.songdata or nil
                    local singinginspiration = inst.components.singinginspiration

                    if singinginspiration and songdata then
                        if singinginspiration:IsSongActive(songdata) then
                            inst:ClearBufferedAction()
                            inst.components.talker:Say(GetActionFailString(inst, "SING_FAIL", "SAMESONG"))
                            if not TryResumePocketRummage(inst) then
                                inst.sg:GoToState("idle")
                            end
                        else
                            inst.sg.statemem.keep_pocket_rummage_mem_onexit = true
                            if singinginspiration:CanAddSong(songdata, buffaction.invobject) then
                                inst.sg:GoToState("sing")
                            else
                                inst.sg:GoToState("cantsing")
                            end
                        end
                    elseif not TryResumePocketRummage(inst) then
                        inst.sg:GoToState("idle")
                    end
                end
            end),
        },

        onexit = CheckPocketRummageMem,
    },

    State{
        name = "sing_fail",
        tags = { "busy", "keep_pocket_rummage" },

        onenter = function(inst)
            inst:PerformBufferedAction()

            if not TryResumePocketRummage(inst) then
                inst.sg:GoToState("idle")
            end
            --V2C: BAD! (code AFTER leaving state)
            --     Probably because they wanted talk to happen with "idle" state tag.
            --     Will just leave this one since talking is not that dangerous.
            --     PLEASE DO NOT COPY
            inst.components.talker:Say(GetActionFailString(inst, "SING_FAIL", "SAMESONG"))
        end,

        onexit = CheckPocketRummageMem,
    },

    State{
        name = "sing",
        tags = { "busy", "nointerrupt", "keep_pocket_rummage" },

        onenter = function(inst)
            local buffaction = inst:GetBufferedAction()
            local songdata = buffaction and buffaction.invobject.songdata or nil

            if songdata ~= nil then
                inst.AnimState:PushAnimation(songdata.INSTANT and "quote" or "sing", false)
                if songdata.INSTANT then
                    inst.components.talker:Say(GetString(inst, "ANNOUNCE_" .. string.upper(songdata.NAME)), nil, true)
                end
            end
        end,

        timeline =
        {
            TimeEvent(3 * FRAMES, function(inst)
                local buffaction = inst:GetBufferedAction()
                local songdata = buffaction and buffaction.invobject.songdata or nil
                if songdata then
                    inst.SoundEmitter:PlaySound(songdata.SOUND or ("dontstarve_DLC001/characters/wathgrithr/"..(songdata.INSTANT and "quote" or "sing")))
                end
            end),

            TimeEvent(24 * FRAMES, function(inst)
                inst:PerformBufferedAction()
            end),
            TimeEvent(34 * FRAMES, function(inst)
                inst.sg:RemoveStateTag("busy")
                inst.sg:RemoveStateTag("nointerrupt")
            end),
            FrameEvent(42, TryResumePocketRummage),
        },

        events =
        {
            EventHandler("animover", function(inst)
                if inst.AnimState:AnimDone() then
                    inst.sg:GoToState("idle")
                end
            end),
        },

        onexit = CheckPocketRummageMem,
    },

    State{
        name = "cantsing",
        tags = { "keep_pocket_rummage" },

        onenter = function(inst)
            local buffaction = inst:GetBufferedAction()
            local required_skill = buffaction and buffaction.invobject.songdata and buffaction.invobject.songdata.REQUIRE_SKILL or nil

            inst:ClearBufferedAction()

            local failstring =
                required_skill ~= nil and
                not inst.components.skilltreeupdater:IsActivated(required_skill) and
                "ANNOUNCE_NOTSKILLEDENOUGH" or
                "ANNOUNCE_NOINSPIRATION"

            inst.components.talker:Say(GetString(inst, failstring), nil, true)

            inst.AnimState:PlayAnimation("sing_fail", false)

            inst.SoundEmitter:PlaySound("dontstarve_DLC001/characters/wathgrithr/fail")
        end,

        timeline =
        {
            FrameEvent(34, TryResumePocketRummage),
        },

        events =
        {
            EventHandler("animover", function(inst)
                if inst.AnimState:AnimDone() then
                    inst.sg:GoToState("idle")
                end
            end),
        },

        onexit = CheckPocketRummageMem,
    },

    -------------------------------------------

in anim there are two zip folders called wathgrithr_mount_sing´and wathgrithr_sing which I assume may contain her singing animations

Thanks @NPCMaxwell! Also could you help me again please because i had put this in my mod main :

AddAction("SING", "Perform!", function(act)
    if act.invobject then
        act.invobject.components.performable:Sing(act.doer)
        
        return true
    end
    
    return false
end)

AddComponentAction("EQUIPPED", "performable", function(inst, doer, target, actions, right)
    if doer.replica.inventory:GetActiveItem() == nil and (doer.replica.rider == nil or not doer.replica.rider:IsRiding()) then
        table.insert(actions, GLOBAL.ACTIONS.SING)
    end
end)

AddStategraphActionHandler("wilson", GLOBAL.ActionHandler(GLOBAL.ACTIONS.SING, "dolongaction"))
AddStategraphActionHandler("wilson_client", GLOBAL.ActionHandler(GLOBAL.ACTIONS.SING, "dolongaction"))

local sing_state = GLOBAL.State{
    name = "sing",
    tags = { "busy", "nointerrupt", "keep_pocket_rummage" },
    
        onenter = function(inst)
            local buffaction = inst:GetBufferedAction()
            local songdata = buffaction and buffaction.invobject.songdata or nil

            if songdata ~= nil then
                inst.AnimState:PushAnimation(songdata.INSTANT and "quote" or "sing", false)
                if songdata.INSTANT then
                    inst.components.talker:Say(GetString(inst, "ANNOUNCE_" .. string.upper(songdata.NAME)), nil, true)
                end
            end
        end,
    
        onexit = CheckPocketRummageMem,
    
        events =
        {
            EventHandler("animover", function(inst)
                if inst.AnimState:AnimDone() then
                    inst.sg:GoToState("idle")
                end
            end),
        },
    
        timeline =
        {
            TimeEvent(3 * FRAMES, function(inst)
                local buffaction = inst:GetBufferedAction()
                local songdata = buffaction and buffaction.invobject.songdata or nil
                if songdata then
                    inst.SoundEmitter:PlaySound(songdata.SOUND or ("dontstarve_DLC001/characters/wathgrithr/"..(songdata.INSTANT and "quote" or "sing")))
                end
            end),

            TimeEvent(24 * FRAMES, function(inst)
                inst:PerformBufferedAction()
            end),
            TimeEvent(34 * FRAMES, function(inst)
                inst.sg:RemoveStateTag("busy")
                inst.sg:RemoveStateTag("nointerrupt")
            end),
            FrameEvent(42, TryResumePocketRummage),
        },
}


local sing_state_client = GLOBAL.State{
    name = "sing",
    server_states = { "sing" },
    forward_server_states = true,
    onenter = function(inst) inst.sg:GoToState("action_uniqueitem_busy") end
    }
    
AddStategraphState("wilson_client", sing_state_client)
AddStategraphState("wilson", sing_state)
AddStategraphActionHandler("wilson", GLOBAL.ActionHandler(GLOBAL.ACTIONS.SING, "sing"))
AddStategraphActionHandler("wilson_client", GLOBAL.ActionHandler(GLOBAL.ACTIONS.SING, "sing"))

 

and it keeps crashing and i dont know what i did wrong, if you could help i would greatly apreciate it! Also here is the client log error:

 

LUA ERROR stack traceback:
        =[C] in function 'error'
        scripts/strict.lua(23,1)
        scripts/mainfunctions.lua(1600,1)
        =[C] in function 'GetPersistentString'
        scripts/quagmire_recipebook.lua(54,1) in function 'Load'
        scripts/main.lua(394,1) in function 'ModSafeStartup'
        scripts/main.lua(506,1)
        =[C] in function 'SetPersistentString'
        scripts/mainfunctions.lua(29,1) in function 'SavePersistentString'
        scripts/modindex.lua(119,1)
        =[C] in function 'GetPersistentString'
        scripts/modindex.lua(106,1) in function 'BeginStartupSequence'
        scripts/main.lua(505,1) in function 'callback'
        scripts/modindex.lua(735,1)
        =[C] in function 'GetPersistentString'
        scripts/modindex.lua(709,1) in function 'Load'
        scripts/main.lua(504,1) in main chunk
[00:01:36]: Faild to load the cookbook!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "filters"] in JSON4Lua.decode_scanString at position 2 : 11    
[00:01:36]: Failed to load the plantregistry!    function: 0000000013F6E260    
[00:01:36]: Failed to load the data in skilltree!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "skillxp"] in JSON4Lua.decode_scanString at position 2 : 11    
[00:01:36]: Trying to apply online cache of skilltree data..    
[00:01:36]: Was a success, using old stored XP values of:    
[00:01:36]:     K:     willow     V:     160    
[00:01:36]:     K:     wilson     V:     160    
[00:01:36]:     K:     winona     V:     8    
[00:01:36]:     K:     wolfgang     V:     42    
[00:01:36]:     K:     woodie     V:     160    
[00:01:36]:     K:     wormwood     V:     111    
[00:01:36]:     K:     wurt     V:     160    
[00:01:36]: Also using old stored skill selection values of:    
[00:01:36]:     K:     willow     V:     table: 0000000012AD30B0    
[00:01:36]:         K:     willow_allegiance_lunar_bernie     V:     true    
[00:01:36]:         K:     willow_allegiance_lunar_fire     V:     true    
[00:01:36]:         K:     willow_attuned_lighter     V:     true    
[00:01:36]:         K:     willow_bernieai     V:     true    
[00:01:36]:         K:     willow_berniehealth_1     V:     true    
[00:01:36]:         K:     willow_bernieregen_1     V:     true    
[00:01:36]:         K:     willow_bernieregen_2     V:     true    
[00:01:36]:         K:     willow_berniesanity_1     V:     true    
[00:01:36]:         K:     willow_berniesanity_2     V:     true    
[00:01:36]:         K:     willow_controlled_burn_1     V:     true    
[00:01:36]:         K:     willow_embers     V:     true    
[00:01:36]:         K:     willow_fire_ball     V:     true    
[00:01:36]:         K:     willow_fire_burst     V:     true    
[00:01:36]:         K:     willow_fire_frenzy     V:     true    
[00:01:36]:         K:     willow_lightradius_1     V:     true    
[00:01:36]:     K:     wilson     V:     table: 0000000012AD36F0    
[00:01:36]:         K:     wilson_alchemy_1     V:     true    
[00:01:36]:         K:     wilson_alchemy_2     V:     true    
[00:01:36]:         K:     wilson_alchemy_3     V:     true    
[00:01:36]:         K:     wilson_alchemy_4     V:     true    
[00:01:36]:         K:     wilson_alchemy_7     V:     true    
[00:01:36]:         K:     wilson_allegiance_lunar     V:     true    
[00:01:36]:         K:     wilson_beard_1     V:     true    
[00:01:36]:         K:     wilson_beard_2     V:     true    
[00:01:36]:         K:     wilson_beard_4     V:     true    
[00:01:36]:         K:     wilson_beard_7     V:     true    
[00:01:36]:         K:     wilson_torch_1     V:     true    
[00:01:36]:         K:     wilson_torch_2     V:     true    
[00:01:36]:         K:     wilson_torch_4     V:     true    
[00:01:36]:         K:     wilson_torch_5     V:     true    
[00:01:36]:         K:     wilson_torch_7     V:     true    
[00:01:36]:     K:     winona     V:     table: 0000000012AD2D40    
[00:01:36]:         K:     winona_portable_structures     V:     true    
[00:01:36]:         K:     winona_spotlight_heated     V:     true    
[00:01:36]:     K:     wolfgang     V:     table: 0000000012AD2E30    
[00:01:36]:         K:     wolfgang_allegiance_lunar_1     V:     true    
[00:01:36]:         K:     wolfgang_critwork_1     V:     true    
[00:01:36]:         K:     wolfgang_critwork_2     V:     true    
[00:01:36]:         K:     wolfgang_dumbbell_crafting     V:     true    
[00:01:36]:         K:     wolfgang_normal_coach     V:     true    
[00:01:36]:         K:     wolfgang_normal_speed     V:     true    
[00:01:36]:         K:     wolfgang_overbuff_1     V:     true    
[00:01:36]:         K:     wolfgang_overbuff_2     V:     true    
[00:01:36]:         K:     wolfgang_planardamage_1     V:     true    
[00:01:36]:     K:     woodie     V:     table: 0000000012AD2610    
[00:01:36]:         K:     woodie_curse_goose_1     V:     true    
[00:01:36]:         K:     woodie_curse_master     V:     true    
[00:01:36]:         K:     woodie_curse_moose_1     V:     true    
[00:01:36]:         K:     woodie_curse_moose_2     V:     true    
[00:01:36]:         K:     woodie_curse_weremeter_1     V:     true    
[00:01:36]:         K:     woodie_curse_weremeter_2     V:     true    
[00:01:36]:         K:     woodie_curse_weremeter_3     V:     true    
[00:01:36]:         K:     woodie_human_lucy_1     V:     true    
[00:01:36]:         K:     woodie_human_lucy_2     V:     true    
[00:01:36]:         K:     woodie_human_lucy_3     V:     true    
[00:01:36]:         K:     woodie_human_quickpicker_1     V:     true    
[00:01:36]:         K:     woodie_human_quickpicker_2     V:     true    
[00:01:36]:         K:     woodie_human_treeguard_1     V:     true    
[00:01:36]:         K:     woodie_human_treeguard_2     V:     true    
[00:01:36]:         K:     woodie_human_treeguard_max     V:     true    
[00:01:36]:     K:     wormwood     V:     table: 0000000012AD3100    
[00:01:36]:         K:     wormwood_allegiance_lunar_mutations_1     V:     true    
[00:01:36]:         K:     wormwood_allegiance_lunar_mutations_2     V:     true    
[00:01:36]:         K:     wormwood_allegiance_lunar_mutations_3     V:     true    
[00:01:36]:         K:     wormwood_berrybushcrafting     V:     true    
[00:01:36]:         K:     wormwood_blooming_farmrange1     V:     true    
[00:01:36]:         K:     wormwood_blooming_speed1     V:     true    
[00:01:36]:         K:     wormwood_identify_plants2     V:     true    
[00:01:36]:         K:     wormwood_moon_cap_eating     V:     true    
[00:01:36]:         K:     wormwood_mushroomplanter_ratebonus1     V:     true    
[00:01:36]:         K:     wormwood_mushroomplanter_ratebonus2     V:     true    
[00:01:36]:         K:     wormwood_mushroomplanter_upgrade     V:     true    
[00:01:36]:         K:     wormwood_quick_selffertilizer     V:     true    
[00:01:36]:         K:     wormwood_reedscrafting     V:     true    
[00:01:36]:         K:     wormwood_saplingcrafting     V:     true    
[00:01:36]:         K:     wormwood_syrupcrafting     V:     true    
[00:01:36]:     K:     wurt     V:     table: 0000000012AD3150    
[00:01:36]:         K:     wurt_amphibian_sanity_1     V:     true    
[00:01:36]:         K:     wurt_amphibian_sanity_2     V:     true    
[00:01:36]:         K:     wurt_amphibian_temperature     V:     true    
[00:01:36]:         K:     wurt_amphibian_thickskin_1     V:     true    
[00:01:36]:         K:     wurt_amphibian_thickskin_2     V:     true    
[00:01:36]:         K:     wurt_civ_2     V:     true    
[00:01:36]:         K:     wurt_civ_3     V:     true    
[00:01:36]:         K:     wurt_lunar_allegiance_1     V:     true    
[00:01:36]:         K:     wurt_mermkingcrown     V:     true    
[00:01:36]:         K:     wurt_mermkingshoulders     V:     true    
[00:01:36]:         K:     wurt_mermkingtrident     V:     true    
[00:01:36]:         K:     wurt_mosquito_craft_1     V:     true    
[00:01:36]:         K:     wurt_mosquito_craft_2     V:     true    
[00:01:36]:         K:     wurt_mosquito_craft_3     V:     true    
[00:01:36]:         K:     wurt_pathfinder     V:     true    
[00:01:36]: Saving skilltree file as a fixup.    
[00:01:36]: Failed to load the data in generickv!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "kvs"] in JSON4Lua.decode_scanString at position 2 : 7    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "669A3770"] in JSON4Lua.decode_scanString at position 2 : 12    0    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "D7A1A9A1"] in JSON4Lua.decode_scanString at position 2 : 12    1    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "4144342"] in JSON4Lua.decode_scanString at position 2 : 11    2    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "60230443"] in JSON4Lua.decode_scanString at position 2 : 12    3    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "DF809124"] in JSON4Lua.decode_scanString at position 2 : 12    4    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "4C2B8B15"] in JSON4Lua.decode_scanString at position 2 : 12    5    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "CF1626"] in JSON4Lua.decode_scanString at position 2 : 10    6    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "9BC37EC7"] in JSON4Lua.decode_scanString at position 2 : 12    7    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "ABE2CCE8"] in JSON4Lua.decode_scanString at position 2 : 12    8    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "DF87DE19"] in JSON4Lua.decode_scanString at position 2 : 12    9    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "15B8981A"] in JSON4Lua.decode_scanString at position 2 : 12    10    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "3DC5793B"] in JSON4Lua.decode_scanString at position 2 : 12    11    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "21D9A5DC"] in JSON4Lua.decode_scanString at position 2 : 12    12    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "8770784D"] in JSON4Lua.decode_scanString at position 2 : 12    13    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "16EEC5E"] in JSON4Lua.decode_scanString at position 2 : 11    14    
[00:01:36]: Failed to load the bucketdata in ScrapbookPartitions!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "5C964CCF"] in JSON4Lua.decode_scanString at position 2 : 12    15    
[00:01:36]: Faild to load the crafting menue profile!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "version"] in JSON4Lua.decode_scanString at position 2 : 11    
[00:01:36]: Failed to load the loading tips!    false    [string "scripts/json.lua"]:450: Failed to load string [ return "shownloadingtips"] in JSON4Lua.decode_scanString at position 2 : 20    
[00:01:36]: DoLuaFile Error: (null)
[00:01:36]: LuaError but no error string
[00:01:36]: Error loading main.lua
[00:01:36]: Failed mSimulation->Reset()
[00:01:36]: [Workshop] CancelDownloads for all pending downloads
[00:01:36]: Collecting garbage...
[00:01:36]: lua_gc took 0.09 seconds
[00:01:36]: ~ShardLuaProxy()
[00:01:36]: ~cEventLeaderboardProxy()
[00:01:36]: ~ItemServerLuaProxy()
[00:01:36]: ~InventoryLuaProxy()
[00:01:36]: ~NetworkLuaProxy()
[00:01:36]: ~SimLuaProxy()
[00:01:36]: [Workshop] CancelDownloads for all pending downloads
[00:01:36]: lua_close took 0.05 seconds
[00:01:37]: [Workshop] CancelDownloads for all pending downloads
[00:01:37]: [Steam] Auth ticket cancelled
[00:01:37]: CurlRequestManager::ClientThread::Main() complete
[00:01:37]: HttpClient2 discarded 0 callbacks.
[00:01:37]: Shutting down
 

Edited by DeadlyFox

Sadly I can't help with that since I myself struggled too much with changing SGWilson via modmain so I made the worst sin and instead created an own SG for my modded character that I keep adkjusting with every game update ^^

But I hope someone who can READ client logs (I can't! I'm sorry, I only work with trial and error so far since I am a baby modder) and known better how to add states via modmain will be able to give you more help!

(Maybe look through the mod forum here for people who have been doing trouble-shooting with reading logs before and attempt to tag them)

Edited by NPCMaxwell
  • Health 1

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
×
  • Create New...