asingingbird

  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

1 Neutral

About asingingbird

  • Rank
    Junior Member
...
  1. I am tring to make alter guardian hat craftable, right now , its recipe was written in recipes.lua like this: Recipe("alterguardianhat", {Ingredient("alterguardianhatshard", 5)}, nil, TECH.LOST, nil, nil, true) What I want to do is to change its recipe, add it to the tech tree so it could show up in the craft tab, I am tring to write these two lines of code in my modmain.lua: AddRecipe("alterguardianhatshard", {Ingredient("moonglass", 6)}, RECIPETABS.CELESTIAL, TECH.CELESTIAL_THREE) AddRecipe("alterguardianhat", {Ingredient("alterguardianhatshard", 5)}, RECIPETABS.CELESTIAL, TECH.CELESTIAL_THREE) But it didn't work, sometimes the game crashes and the log mentioned some "netvar dirty" errors, some other times I can connect to the server, but my character was somehow dead, I mean not really dead, the character can still move, it did not become a ghost, but there is a ghost icon on the day clock (that is a test server, and I am the only player), and the craft tab was wired, the recipes I didn't unlock earlier were all disappeared from the craft tab. If I disable this mod, reopen the game, everything isback to normal, my character isalive again and the craft tab is back too. That is really confusing. Was it because this recipe was locked, so cannot be altered ? Is that even possible to change an existing recipe ? Hope someone could tell me what's really going on. Any help is appreciated, thanks a lot ! ================================================================================================================================================================================================== Update: I figured it out myself . I should set all_clients_require_mod to true in modinfo.lua, because this mod should be running on server all_clients_require_mod = true
  2. You are amazing !! It did work, thanks a lot. The solution is AddRecipe( "blue_chest", {Ingredient("cutstone", 2), Ingredient("bluegem", 4), Ingredient("thulecite", 4)}, RECIPETABS.TOWN, TECH.SCIENCE_TWO, "blue_chest_placer", 1, nil, nil, nil, "images/inventoryimages/blue_chest.xml" )
  3. The scml.exe mod tool seems to have some sort of bug, or maybe I'm not using it right. I'm reskinning some animation for my mod, to be more specific, sacred_chest. After recompile it using scml.exe, I got two broken animations: the chest close animation and the chest place animation And Here are the detailed steps I toke: 1. Copy sacred_chest.zip from game_directory/anim folder to my Desktop 2. Extract sacred_chest.zip to folder my_Desktop/sacred_chest/, and now I get my_Desktop/sacred_chest/anim.bin, my_Desktop/sacred_chest/build.bin and my_Desktop/sacred_chest/atlas-0.tex 3. Convert Klei animation format to spriter project using ktools, this is the command I run: krane.exe my_Desktop\sacred_chest\anim.bin my_Desktop\sacred_chest\build.bin my_Desktop\sacred_chest\spriter_animation_converted_from_original_sacred_chest_using_ktools then I got the spriter project files inside my_Desktop\sacred_chest\spriter_animation_converted_from_original_sacred_chest_using_ktools folder 4. Do not change anything and recompile the spriter project back to Klei animation format using scml.exe, this is the command I run: scml.exe my_Desktop\sacred_chest\spriter_animation_converted_from_original_sacred_chest_using_ktools\sacred_chest.scml my_Desktop\sacred_chest\repacked_animation_using scml_mod_tool then I get the recompiled sacred_chest.zip in sacred_chest\repacked_animation_using scml_mod_tool\anim\sacred_chest.zip 5. Use ktools to decompile the sacred_chest.zip I just recompiled in step 4, to view the recompiled animation 6. Use spriter to open the animation project I decompiled in step 5, then I got those two broken animation. I also tried place the spriter project in my_mod/exported folder, let the game compile it on start, got the same result.
  4. Hi, V2C, I am recently learning how to use netvars, great to find this post, and thanks for your explaining. I have some more questions though: 1. "The GUID parameter of netvars is not meaningful", does that mean it does not necessarily need to be the actually GUID of an existing inst, it can be any value or even nil ? 2. Where should I declare these netvars ? The Hunt uses them in a Class, can I declare it right in modmain.lua or a PostInit function?
  5. you should download and install this https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0
  6. I'm making a mod called blue chest, it's some sort of an "ice chest". I have been working on this for a few days, stuck with this very problem. Hope someone could help me figure out how to make it work. Big thanks !! The attached file is my blue chest mod. This is the overview of my mod: /blue_chest ├── anim │ ├── blue_chest.zip │ └── ui_chest_3x3.zip ├── images │ ├── inventoryimages │ │ ├── blue_chest.tex --- here is the blue chest icon, it's right there, but why the game could not find it ? │ │ └── blue_chest.xml │ └── pngs │ ├── blue_chest.png │ └── blue_chest_icon.png ├── modicon.tex ├── modicon.xml ├── modinfo.lua ├── modmain.lua ├── preview.png └── scripts └── prefabs └── blue_chest.lua The problem is I can't get the craft tab icon for my blue chest to work properly, the game supposed to load images/inventoryimages/blue_chest.tex file as icon for blue chest, but what I see is another image, and more interesting, it always replaces blue chest icon with the icon of the last item in the previous tab I just opened. First it was replaced with the last item in structure tab then I opened food tab, it shows up like this, the icon becomes the last item in the food tab blue_chest.xml has one line of code: <Atlas><Texture filename="blue_chest.tex" /><Elements><Element name="blue_chest.tex" u1="0" u2="1" v1="0" v2="1" /></Elements></Atlas> This is the code in modmail.lua: GLOBAL.setmetatable( env, { __index = function(t, k) return GLOBAL.rawget(GLOBAL, k) end } ) PrefabFiles = { "blue_chest", } Assets = { Asset("ATLAS", "images/inventoryimages/blue_chest.xml"), Asset("IMAGE", "images/inventoryimages/blue_chest.tex"), Asset("ANIM", "anim/blue_chest.zip"), Asset("ANIM", "anim/ui_chest_3x3.zip"), } local containers = require "containers" local params = {} params.blue_chest = { widget = { slotpos = {}, animbank = "ui_chest_3x3", animbuild = "ui_chest_3x3", pos = GLOBAL.Vector3(0, 200, 0), side_align_tip = 160 }, type = "blue_chest" } for y = 2, 0, -1 do for x = 0, 2 do table.insert(params.blue_chest.widget.slotpos, Vector3(80 * x - 80 * 2 + 80, 80 * y - 80 * 2 + 80, 0)) end end local containers_widgetsetup_base = containers.widgetsetup function containers.widgetsetup(container, prefab, data, ...) local t = params[prefab or container.inst.prefab] if t ~= nil then for k, v in pairs(t) do container[k] = v end container:SetNumSlots(container.widget.slotpos ~= nil and #container.widget.slotpos or 0) else containers_widgetsetup_base(container, prefab, data, ...) end end for k, v in pairs(params) do containers.MAXITEMSLOTS = math.max(containers.MAXITEMSLOTS, v.widget.slotpos ~= nil and #v.widget.slotpos or 0) end AddRecipe( "blue_chest", {Ingredient("cutstone", 2), Ingredient("bluegem", 4), Ingredient("thulecite", 4)}, RECIPETABS.TOWN, TECH.SCIENCE_TWO, "blue_chest_placer", 1, nil, nil, nil, "images/inventoryimages/blue_chest.xml", "images/inventoryimages/blue_chest.tex" ) STRINGS.NAMES.BLUE_CHEST = "Blue Chest" STRINGS.RECIPE_DESC.BLUE_CHEST = "A chest with magic" STRINGS.CHARACTERS.GENERIC.DESCRIBE.BLUE_CHEST = "The Power Of Youth!" And I get some logs from client_log.txt, but no idea how to fix this: [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:24]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:24]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:39]: WARNING! Could not find region 'images/inventoryimages/blue_chest.tex' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Is the region specified in the atlas? [00:02:39]: Looking for default texture '' from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. [00:02:39]: Error Looking for default texture in from atlas '../mods/workshop-2495791144/images/inventoryimages/blue_chest.xml'. Thanks again !!!!! blue_chest.zip
  7. I am working on a mod called event clock, basically, it's a gui version of "advanced monster warning", so players could check monster timer with a hotkey. But the code I wrote seems to have some bugs in it, I had debuged the mod for the whole day, still no clue how to fix it. Really hope someone so kind could give me some hint, thanks a lot !!!! I post my code here, you can also download the whole project in the attachment. And the last part is some logs the mod outputs and my analysis. Here is what I have found. The method `EventClockScreen:Open()` should run on the server, but it runs on the client side instead, which makes `TheWorld.components.hounded` a nil value, so I can't get attack time of hound, as shown in the screenshot above. Any kind of help is appreciated !!! ```modmain.lua GLOBAL.setmetatable(env,{__index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end}) ENABLE_GUI_TIMER = GetModConfigData("enable_gui_timer") ENABLE_INCOMING_WARNING = GetModConfigData("enable_incoming_warning") LANGUAGE = GetModConfigData("language") Assets = { Asset("ATLAS", "images/hound.xml"), Asset("ATLAS", "images/worm.xml"), Asset("ATLAS", "images/bearger.xml"), Asset("ATLAS", "images/deerclops.xml"), Asset("ATLAS", "images/sinkhole.xml"), } EventClockScreen = GLOBAL.require("screens/eventclock") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%", TheWorld) AddPrefabPostInit("world", function(inst) print("$$$$$$$$$$$$$$$$$$$$$$$$$$$", TheWorld, TheWorld.ismastersim, TheWorld.components, TheWorld.components.hounded) function displayEventClockScreen() if EventClockScreen:Open() then TheFrontEnd:PushScreen(EventClockScreen) end end function closeEventClockScreen() EventClockScreen:Close() end if ENABLE_GUI_TIMER then --open gui timer window with hotkey `C` GLOBAL.TheInput:AddKeyDownHandler(KEY_C, displayEventClockScreen) GLOBAL.TheInput:AddKeyUpHandler(KEY_C, closeEventClockScreen) end end) ``` ```scripts/screens/eventclock.lua local Screen = require "widgets/screen" local Widget = require "widgets/widget" local Image = require "widgets/image" local Text = require "widgets/text" local TEMPLATES = require "widgets/redux/templates" TIMER_UPDATE_SEG = 4 LANGUAGE = "english" local function localization() if LANGUAGE == "english" then return { DAYS = " days", HOUND = "hound attacks in ", WORM = "worm attacks in ", BEARGER = "bearger attacks in ", DEERCLOPS = "deerclops attacks in ", SINKHOLE = "sinkhole falls in " } end end WARN_MESSAGE = localization() local function second_to_day(sec) if sec then local time_in_days = string.format("%.2f", sec / TUNING.TOTAL_DAY_TIME) return time_in_days..WARN_MESSAGE.DAYS end return "- - -" end EventClockScreen = Class(Screen, function(self) if self.updateTask ~= nil then print("######################update_timer", self.UpdateTimer) --update monster timer periodically self.updateTask = ThePlayer:DoPeriodicTask(TIMER_UPDATE_FREQUENCY, self.UpdateTimer) end end) function EventClockScreen:HoundTimeLeft() local time_left print("########## in HoundTimeLeft", TheWorld, TheWorld.ismastersim, TheWorld.components.hounded) if TheWorld.ismastersim and TheWorld.components.hounded then time_left = TheWorld.components.hounded:GetTimeToAttack() end print("######################HoundTimeLeft", time_left) return time_left end local DEERCLOPS_TIMERNAME = "deerclops_timetoattack" function EventClockScreen:DeerclopsAttackTimeLeft() local time_left print("########## in DeerclopsAttackTimeLeft", TheWorld, TheWorld.ismastersim, TheWorld.components.deerclopsspawner, TUNING.DEERCLOPS_ATTACKS_OFF_SEASON or TheWorld.state.iswinter) if TheWorld.ismastersim and TheWorld.components.deerclopsspawner and (TUNING.DEERCLOPS_ATTACKS_OFF_SEASON or TheWorld.state.iswinter) then time_left = TheWorld.components.worldsettingstimer:GetTimeLeft(DEERCLOPS_TIMERNAME) end print("######################DeerclopsAttackTimeLeft", time_left) return time_left end local BEARGER_TIMERNAME = "bearger_timetospawn" function EventClockScreen:BeargerSpawnTimeLeft() local time_left print("########## in BeargerSpawnTimeLeft", TheWorld, TheWorld.ismastersim, TheWorld.components.beargerspawner, TheWorld.state.isautumn) if TheWorld.ismastersim and TheWorld.components.beargerspawner and TheWorld.state.isautumn then time_left = TheWorld.components.worldsettingstimer:GetTimeLeft(BEARGER_TIMERNAME) end print("######################BeargerSpawnTimeLeft", time_left) return time_left end local ANTLION_RAGE_TIMER = "rage" function EventClockScreen:SinkHoleTimeLeft() local time_left print("########## in SinkHoleTimeLeft", TheWorld, TheWorld.ismastersim, TheWorld.components.sinkholespawner, TheWorld.state.issummer) if TheWorld.ismastersim and TheWorld.components.sinkholespawner and TheWorld.state.issummer then time_left = TheWorld.components.worldsettingstimer:GetTimeLeft(ANTLION_RAGE_TIMER) end print("######################SinkHoleTimeLeft", time_left) return time_left end function EventClockScreen:Open() if self.active then return end Screen._ctor(self, "EventClockScreen") self.active = true --darken everything behind the dialog if self.black then self.black:Kill() end self.black = self:AddChild(Image("images/global.xml", "square.tex")) self.black:SetVRegPoint(ANCHOR_MIDDLE) self.black:SetHRegPoint(ANCHOR_MIDDLE) self.black:SetVAnchor(ANCHOR_MIDDLE) self.black:SetHAnchor(ANCHOR_MIDDLE) self.black:SetScaleMode(SCALEMODE_FILLSCREEN) self.black:SetTint(0,0,0,0) if self.proot then self.proot:Kill() end self.proot = self:AddChild(Widget("ROOT")) self.proot:SetVAnchor(ANCHOR_MIDDLE) self.proot:SetHAnchor(ANCHOR_MIDDLE) self.proot:SetPosition(0,0,0) self.proot:SetScaleMode(SCALEMODE_PROPORTIONAL) --throw up the background if self.bg then self.bg:Kill() end self.bg = self.proot:AddChild(TEMPLATES.RectangleWindow(200, 360, "Event Clock")) --add boss icon if TheWorld:HasTag("cave") then --worm self.worm_icon = self.proot:AddChild(Image("images/worm.xml", "worm.tex")) self.worm_icon:SetScale(0.15) self.worm_icon:SetPosition(-40, 70) self.worm_timer = self.proot:AddChild(Text(NEWFONT_SMALL, 16)) self.worm_timer:SetPosition(40, 70) self.worm_timer:SetString(second_to_day(self:HoundTimeLeft())) else --hound self.hound_icon = self.proot:AddChild(Image("images/hound.xml", "hound.tex")) self.hound_icon:SetScale(0.15) self.hound_icon:SetPosition(-40, 70) self.hound_timer = self.proot:AddChild(Text(NEWFONT_SMALL, 16)) self.hound_timer:SetPosition(40, 70) self.hound_timer:SetString(second_to_day(self:HoundTimeLeft())) end --bearger self.bearger_icon = self.proot:AddChild(Image("images/bearger.xml", "bearger.tex")) self.bearger_icon:SetScale(0.15) self.bearger_icon:SetPosition(-40, 10) self.bearger_timer = self.proot:AddChild(Text(NEWFONT_SMALL, 16)) self.bearger_timer:SetPosition(40, 10) self.bearger_timer:SetString(second_to_day(self:BeargerSpawnTimeLeft())) --deerclops self.deerclops_icon = self.proot:AddChild(Image("images/deerclops.xml", "deerclops.tex")) self.deerclops_icon:SetScale(0.15) self.deerclops_icon:SetPosition(-40, -50) self.deerclops_timer = self.proot:AddChild(Text(NEWFONT_SMALL, 16)) self.deerclops_timer:SetPosition(40, -50) self.deerclops_timer:SetString(second_to_day(self:DeerclopsAttackTimeLeft())) --sinkhole self.sinkhole_icon = self.proot:AddChild(Image("images/sinkhole.xml", "sinkhole.tex")) self.sinkhole_icon:SetScale(0.15) self.sinkhole_icon:SetPosition(-40, -110) self.sinkhole_timer = self.proot:AddChild(Text(NEWFONT_SMALL, 16)) self.sinkhole_timer:SetPosition(40, -110) self.sinkhole_timer:SetString(second_to_day(self:SinkHoleTimeLeft())) return self.active end function EventClockScreen:Close() if self.active then self.active = false TheFrontEnd:PopScreen() end end function EventClockScreen:AnnounceIncoming(time_left, action) --announce monster attacks one day ahead if ENABLE_INCOMING_WARNING and time_left and time_left >= TUNING.TOTAL_DAY_TIME and time_left < TUNING.TOTAL_DAY_TIME + TIMER_UPDATE_FREQUENCY then local message = action..second_to_day(time_left)..WARN_MESSAGE.DAYS TheNet:Say(STRINGS.LMB .. " " .. message, TheInput:IsKeyDown(KEY_CTRL)) end end function EventClockScreen:UpdateTimer() --update monster timer local hound_time_left = self:HoundTimeLeft() local bearger_spawn_time_left = self:BeargerSpawnTimeLeft() local deerclops_attack_time_left = self:DeerclopsAttackTimeLeft() local sinkhole_time_left = self:SinkHoleTimeLeft() if TheWorld:HasTag("cave") then self:AnnounceIncoming(hound_time_left, WARN_MESSAGE.WORM) else self:AnnounceIncoming(hound_time_left, WARN_MESSAGE.HOUND) end self:AnnounceIncoming(bearger_spawn_time_left, WARN_MESSAGE.BEARGER) self:AnnounceIncoming(deerclops_attack_time_left, WARN_MESSAGE.DEERCLOPS) self:AnnounceIncoming(sinkhole_time_left, WARN_MESSAGE.SINKHOLE) if self.active then if TheWorld:HasTag("cave") then self.worm_timer:SetString(second_to_day(hound_time_left)) else self.hound_timer:SetString(second_to_day(hound_time_left)) end self.bearger_timer:SetString(second_to_day(bearger_spawn_time_left)) self.deerclops_timer:SetString(second_to_day(deerclops_attack_time_left)) self.sinkhole_timer:SetString(second_to_day(sinkhole_time_left)) end end print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") print(TheWorld) print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") return EventClockScreen ``` I added some debug log, on the server, I got logs like this, which means `TheWorld.components.hounded` does exist on server : ``` [00:00:08]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ [00:00:08]: nil [00:00:08]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ [00:00:08]: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nil [00:00:15]: $$$$$$$$$$$$$$$$$$$$$$$$$$$ 100026 - world true table: 0EB43518 table: 1376FCF0 ``` but on client, I got these logs, meaning `displayEventClockScreen` method runs on client side, that's why it's not working : ``` [00:01:11]: ########## in HoundTimeLeft 100028 - world false nil [00:01:11]: ######################HoundTimeLeft nil [00:01:11]: ########## in BeargerSpawnTimeLeft 100028 - world false nil true [00:01:11]: ######################BeargerSpawnTimeLeft nil [00:01:11]: ########## in DeerclopsAttackTimeLeft 100028 - world false nil false [00:01:11]: ######################DeerclopsAttackTimeLeft nil [00:01:11]: ########## in SinkHoleTimeLeft 100028 - world false nil false [00:01:11]: ######################SinkHoleTimeLeft nil [00:01:16]: ########## in HoundTimeLeft 100028 - world false nil [00:01:16]: ######################HoundTimeLeft nil [00:01:16]: ########## in BeargerSpawnTimeLeft 100028 - world false nil true [00:01:16]: ######################BeargerSpawnTimeLeft nil [00:01:16]: ########## in DeerclopsAttackTimeLeft 100028 - world false nil false [00:01:16]: ######################DeerclopsAttackTimeLeft nil [00:01:16]: ########## in SinkHoleTimeLeft 100028 - world false nil false [00:01:16]: ######################SinkHoleTimeLeft nil [00:01:25]: ########## in HoundTimeLeft 100028 - world false nil [00:01:25]: ######################HoundTimeLeft nil [00:01:25]: ########## in BeargerSpawnTimeLeft 100028 - world false nil true [00:01:25]: ######################BeargerSpawnTimeLeft nil [00:01:25]: ########## in DeerclopsAttackTimeLeft 100028 - world false nil false [00:01:25]: ######################DeerclopsAttackTimeLeft nil [00:01:25]: ########## in SinkHoleTimeLeft 100028 - world false nil false [00:01:25]: ######################SinkHoleTimeLeft nil [00:01:27]: ########## in HoundTimeLeft 100028 - world false nil [00:01:27]: ######################HoundTimeLeft nil [00:01:27]: ########## in BeargerSpawnTimeLeft 100028 - world false nil true [00:01:27]: ######################BeargerSpawnTimeLeft nil [00:01:27]: ########## in DeerclopsAttackTimeLeft 100028 - world false nil false [00:01:27]: ######################DeerclopsAttackTimeLeft nil [00:01:27]: ########## in SinkHoleTimeLeft 100028 - world false nil false [00:01:27]: ######################SinkHoleTimeLeft nil ``` my_mod.zip