#Modding reports, requests and suggestions
1 messages · Page 1 of 1 (latest)
Message format examples:
Report
Some stuff not working. I need this stuff for creating feature X.
or
Request
I want some API for feature X.
or
Suggestion
Will be cool if you add X, because ...
Report
there is a misstype in /ModOptions.lua
function PZAPI.ModOptions:save()
--
local fileOutput = getFileWriter("ModOptions.ini", true, false)
--
end
function PZAPI.ModOptions:load()
--
local file = getFileReader("modOptions.ini", true)
--
end
capitalization modOptions.ini instead of ModOptions.ini
it saves the file as ModOptions.ini and tries to load modOptions.ini
as a result mod options settings are constantly reset in case sensitive filesystems
Request/Suggestion
- Add
getMaxHealth,getHealthandsetHealthfunctions fromIsoThumpabletoIsoWindowandIsoBarricade, - Same to objects that are breakable by players/zombies - dont know full list of it and if it is possible.
Request
Add getter method for worldZRotation of InventoryItem. It can be set but has no getter and is hidden from getClassField by the extended classes.
Suggestion
It would be cool if there was casting of java classes exposed to the lua API. It would be very usefull in combination with the getClassField for gettings fields normally hidden by extending of classes.
Report
Some translation files, for example:
media\lua\shared\Translate\EN\Recipes_EN.txt
media\lua\shared\Translate\EN\IG_UI_EN.txt
The headers are:
RecipesEN {
and
IGUI_EN = {
However, in the CH files:
media\lua\shared\Translate\CH copy\Recipes_CH.txt
media\lua\shared\Translate\CH copy\IG_UI_CH.txt
The headers are:
Recipes_CH = {
and
IG_UI_CH = {
This inconsistency might cause some MOD translations to fail unless the game files are directly overwritten.
Request: please make translations in utf-8 encodings. nasKo reacted with checkmark so I thought it's planned to be here in b42 but it's not. Having a mod with multiple different translations is very inconvenient because you have to keep track of every encoding or eventually game will butcher your translations and you'll have to recover them from version control.
I'm also not only one who's interested in it, #1288876443563986964 message and I'm sure there are more modders that have same problem but unaware of this suggestion
Request:
An event for when Settings are saved/applied. Since ModOptions is now handled by the game itself, it would be beneficial for us to have an event to cache and/or update any local variables with the created mod options. This could be added trivially like:
LuaEventManager.AddEvent("OnApplySettings")
function MainOptions:apply(closeAfter)
...end of function...
triggerEvent("OnApplySettings")
end
No parameters are needed, just an event to know to read all of our added options.
- You have for Window functions: setSmashed(false/true) and getThumpCondition()
Need list of objects and why you need it
About request - why you need it?
About suggestion - Some java classes already exposed. getClassField allowed, but only in debug
Can you change object health with it that isn't thumpable/door on server and client side ? In B41 you either couldn't change or check health and server part was desynced for client. Don't need object list just saying I don't know it
About server/client logic need to think how better to do it. Can you write cases where need it?
hello, little off topic, how long this thread will be remained? Is there enough time to think deeply before I post something here?
I need it for my existing mod Repair Wall to add ability to repair halfly broken windows/stuff that is placed in world and is breakable by player's melee/zombies by setting its health to default value.
At least for IsoWindow, since it has health and max health same as IsoDoor, but you can't manage it.
I think if mods will have
IGUI_CH {
It will still work. Because file name and module name not affect on translator. As I remember, you can place IGUI_XXX line in ContextMenu file and it still will work
yep
thank you. see ya 
Reguest: I'm using IsoWorldInventoryObject as a placeholder that I can replace. I would like to get the rotation of the object in the world so that the player can rotate the object as desired when placing (or just drop it with randomized rotation). Then I can accurately replace it with something else that has the same rotation. I have designed around this, but think it would be usefull to be able to get the rotation of dropped/placed item
Suggestion: The suggestion was about implementing a method that can be used to cast arbitrary class to another. For example InventoryContainer to an InventoryItem for use with the getClassField
Report
Weird issue with item script, for some reason game adds path to mods folder /home/hello/Zomboid/mods in front of the proper path
Is it supposed to try to use full path at all?
DEBUG: Script f:0, t:1734539844301> ScriptManager.ParseScript > Parsing...
DEBUG: Script f:0, t:1734539844301> ScriptManager.LoadFile > media/scripts/xui/xui_skin_fluid_separator.txt
DEBUG: Script f:0, t:1734539844301> ScriptManager.ParseScript > Parsing...
DEBUG: Script f:0, t:1734539844301> ScriptManager.LoadFile > media/scripts/xui/xui_skin_furnace_processor.txt
DEBUG: Script f:0, t:1734539844301> ScriptManager.ParseScript > Parsing...
DEBUG: Script f:0, t:1734539844301> ScriptManager.LoadFile > /home/hello/zomboid/workshop/somewhatsuits/contents/mods/somewhatsuits/common/media/scripts/clothing/swsuitsclothing.txt
ERROR: General f:0, t:1734539844302> ExceptionLogger.logException> Exception thrown
java.io.FileNotFoundException: /home/hello/Zomboid/mods/home/hello/zomboid/workshop/somewhatsuits/contents/mods/somewhatsuits/common/media/scripts/clothing/swsuitsclothing.txt (No such file or directory) at FileInputStream.open0 (Native Method).
Stack trace:
Report update:
Issue is only present in native linux version of the game, issue isn't present in proton version.
Unrelated but proton version is insanely slow to load lua compared to native version (we talk about seconds vs minutes), which was the same in b41, but that's I would guess is due to proton itself. Overall native linux version has better performance and less visual glitches.
It seems like something is amiss with the file structure for B42 mods.
When I have the Media -> AnimSets -> Player - Idle/Emote/Etc files inside of 42.0 or common, the game is not looking for these .xmls on version b42. It is still seemingly pointed at the old B41 file structure. The animations do not, and will not play unless the XMl's are outside of 42.0 or common and in the style of the old b41 file structure.
Made sure to ensure I was on the b42 version as well.
ADDENDUM: It's possible it needs to exist in both for some reason? Running into an issue now where when only one or the other file path exists, the animations do not work. But it seems to function while the animation .xmls exist in both file paths.
Confirmed; no clue why. But my animations will not play unless they exist in both the 42.0 folder and the B41 file format;
this actually is not needed. you can overwrite base game function and then fire events in it. Unless I misunderstand why you need it. Like
oldModOptionsAapply = MainOptions.apply -- this might not be 100% correct but you get the idea
function MainOptions:apply(closeAfter)
oldModOptionsAapply(closeAfter)
-- your code
end
Yup, that's what I've been doing (since B41 actually). But having an event would make this easier and more accessible for everyone, and not have a million overwrites for this function if you need to perform specific changes when options are updated (more than just updating/caching local variables).
Thanks for report, I will check it
Hello,
In FishingHandler.lua there is
if not player:isAiming() then
Fishing.Handler.handleFishing(player, inventoryItem)
end
end
Events.OnEquipPrimary.Add(Fishing.Handler.onEquipPrimary)```
OnEquipPrimary first parameter is assumed to be a player but it can be other isogamecharacter derivatives, so for example if a zombie is equipped with an item this generates errors.
I will fix it, but as I know in vanilla zombie can't equip weapon in primary hand
It's for mods?
yes
Request:
Un-hardcoding max carry weight of 50 would also be nice. Hoarders gotta hoard
Request / Suggestion
Hello, carefully asking. can we have more parameters for OnCharacterDeath / OnZombieDeath to tracking method which killed victim??
this is an example.
function OnCharacterDeath(character, type, weapon, killer)
-- type is for damaged types(bullets, burnt, knifed, smashed..)
-- weapon is for weapon's name
It's for especially MP and/or Mods (quest, archivement, skills, etc..)
the screen capture is how I'm currently checking what weapon was used for kill.
but yeah, it's not friendly. i actually gave up on b41.
I know I can mix with OnWeaponHitCharacter event for this function, but still i think it's not a friendly way.
I'm sorry if something similar is already existed.
Report
I suppose this counts as a bit of a report, but I don't believe generators are working as intended on the java side for use in my generator range mod. They do not currently account for the increase in height and depth. This was reported over on the steam discussions, but I figured I'd report it here just in case. If it's intended for generators to not power basements / anything above the 8th z-level, please inform me. I assume this was the B41 limits, and I just figured this wasn't intended behavior seeing as.. well.. things can go a lot higher and lower now.
I already did a brief test by activating a generator at z: 0 (base level), and it failed to power a basement that was within sufficient range (z: -1). I assume each z-level represents a floor, which could be misguided, but regardless it doesn't work.
Note: The mod is supposed to display range, not modify it. I understand generators will probably be moved or be able to modified a bit more in the future judging by dev-logs though, so if that's the case I'll simply wait for things to be exposed and updated. Thank you!
I think it might only be ineffective in the local development environment. I later found out that others using my MOD have no issues.
Request
I'd like for more of ItemPickerJava to be friendlier to the user, even a simple "creation" method for an ItemPickerItem would open up some opportunities for me. At the given moment, it's basically impossible for me to get the loot tables associated with any given bag in the inventory, so it'd be cool if this would open up so I don't have to replicate all of the java code in lua which I doubt will last long.
Seems that the existence of ItemSpawner has been revealed to me. Apologies!
Request:
Functions for encoding & decoding JSON
Request:
Expose generator range values in LUA like fuel and condition are to allow modders to make more custom variants of generators and change their parameters.
Request:
(Build 42) It is currently not possible to change the capacity value of bags, backpacks, and even car trunks beyond the following values:
Character and Bags: 50
Vehicle: 1000
This is because there is a limit imposed in the hard-coded files, and not having professional programming skills such as those of the staff, we can no longer have access to such game mechanics. Could you make it so that players and modders can change these values at will, exactly as it was in build 41?
Request:(Build 42) Ability to alter the aiming system and all it's shenanigans as apparently it is hardcoded (if it is not please correct me and i'll remove this request)
Request:
(Build 42) API access to vehicle controls, in b41 ClientControls are not exposed which does not allow accelerating, braking nor turning the vehicle.
Request:
By any chance can b41 be updated to use folder 41 so we don't have to keep a bunch of files unorganized? It doesn't have to use common, it can be self-sustained in 41 just so we don't have to keep a bunch of files scattered around unorganized 
Report
It seems the fluid system has some sort of floating point error, pouring in 30 and 20ml provides 49ml instead of 50ml
Request:
JSON encoding and decoding utility, or a similiar alternative, please we really need this as everyone is implementing their own version of this encoding
Report
- Posters, Icons not working from
commonfolder. - Mod not working without extra version folder. This just feels odd to create folder for no reason.
Expectation: mod fully works by only placing files into the common folder.
Request: an event when the equipped item breaks
Report
When you are selecting spawn place, the scrollbar is behind image on 720p resolution.
Report
Mod info is cropped when selecting mods on 720p resolution.
Crafting UI does not fit on this resolution either...
Report:
A bug on the lua side, but it appears that there's an issue with Fish.lua in terms of the :getFishByLure() implementation in vanilla. If my understanding is at all correct, the first potential fish associated with a lure will never be selected, which can be problematic seeing as if you only have one fish for a lure (like I did for testing), it will result in the system incorrectly assuming a fish doesn't exist.
This can be temporarily patched for my purposes, but it unfortunately requires a complete function overwrite when I should've been able to retrieve it with a modified reference.
local sum = 0
local fishNumber = ZombRandFloat(0.0, baitFactorSum)
for _, fishConfig in ipairs(fishes) do
if sum >= fishNumber then
item = fishConfig
break
end
sum = sum + fishConfig.lure[self.lure]
end
Following the code, the first iteration nearly always fails (unless you're lucky enough to roll a 0, but the odds of that are astronomically low) since fishNumber can never be smaller than 0.
A patch is relatively straightforward. Move the sum addition up. This shouldn't cause any issues assuming my knowledge is correct, but may need testing.
local sum = 0
local fishNumber = ZombRandFloat(0.0, baitFactorSum)
for _, fishConfig in ipairs(fishes) do
sum = sum + fishConfig.lure[self.lure]
if sum >= fishNumber then
item = fishConfig
break
end
end
Figured I'd report even if it's lua side, since though we can fix it ourselves it'd require more community cooperation than typical for it to be properly patched everywhere. This bug does effect the vanilla build, rarely, but it's likely to have more undesireable consequences for modders like myself.
Report:
The poster image and icon is not loaded if the mod.info is in the folder 42 and the pngs are in common
Request:
(Build 42) For modding. Seems like there is a lot of new stuff like CombatManager, EffectManager that is not exposed by LuaManager.java, any chanceto get this exposed like it is for example for ClimateManager that you can call getClimateManager to get the instance of it? This is important because some of the stuff is now gone like startMuzzleFlash method and moved to EffectManager that is inaccessible now, so modders are losing features that worked in b41 and can't update their mods fully to work in b42.
Report/Request
I'll use ProxInventory as as my example mod for this bug.
- This bug happens when I have ProxInventory downloaded from the steam workshop and I also have it in my
Workshopfolder. - The game will not load ProxInventory from the
Workshopfolder, and it will instead use the steam workshop folder.
This is not good as I often need to unsubscribe from my own mod to work on it. And it often leads to confusion as "why the F is my mod not doing what I want it to do" to only realize that it was loading the code from the live version.
It would be nice if in -debug mode the game will try and prioritize loading mods from the Workshop folder instead of the steam workshop one. It can solve many headaches and a lot of time wasted. Please consider fixing this
Report:
In new modOptions, you can create slider and set a tooltip for it. However, I've been trying for 3min to catch a pixel in which it's displayed but I can't.
(can't show tooltip on slider modOption)
may i have a hint, is it supposed to be ModOptions.ini or modOptions.ini?
edit: nvm added a rough workaround so it tries to load from both 
Report
Secondary report on generators. If I'm reading the code correctly, it actually powers 1 additional floor below in comparison to above. 3 floors down, 2 floors up. This may also be a relic of B41 that nobody noticed, but if they're intended to power the same number of floors regardless of direction then that's something that should probably be fixed.
Report!
It seems that the condition to load packs with name packName+2x is never met and so they are not loaded.
e.g
pack=packName
file packName2x.pack used to be loaded before, now they are not.
Request
Please add a way to add tags to existing items, whether vanilla or from mods using lua.
B42.
Use case
Trying to create an item recipe which uses vanilla items
craftRecipe BetterBackpack
{
...,
inputs
{
item 2 tags[MilitaryBag],
...,
}
outputs
{
item 1 ModName.BetterBackpack,
}
}
where MilitaryBag would be one of Base.Bag_ALICEpack_Army ,Base.Bag_ALICEpack, Base.Bag_ALICEpack_DesertCamo, Base.Bag_SurvivorBag
so the recipe would accept any combination of two of the above bags
Without tags to achieve the same(similar, as recipe names have to be different) it would require 8 separate recipes.
Adding the tag using DoParam or :getTags():add("MilitaryBag") does add it to the item but not to the dictionary which is used to check the recipe.
EDIT.
Apparently it's not going to help with the many recipes issue.
Request - Report
In 41.78 you could use "moveables.tile_tileson_01" as source or result in crafting, but in 42 it doesn't work if you try to use it in inputs or outputs and gives you an error because that script is not found.
This is a really useful feature that removes the need for extra item scripts and hopefully it is added again.
Not tested in 42.0, but it would be really nice if you could also add moveable items to distributions. It used to give same error that crafting gives now.
i noticed something in the log, in the appended path Zomboid is capitalized, it is the only instance in the log where it is capitalized, hope this can be a hint in addition to the fact that issue doesn't take place in both proton version and windows 
Report
m_UnderlayMasksFolder in the xml file of a clothing item doesn't seem do anything if the item doesn't also have a m_Masks id added.
This is kind of restricting because you can't use a mask if the clothing item doesn't cover an entire body part that has a mask id assigned.
For example if you have a clothing item that only partially covers the chest and arms then it's impossible to use masks to avoid clipping with the body or lower clothing items.
Request
Having the ability to modify the stealth parameters of IsoZombie would be very very useful to make custom zombies. Values I'm thinking about are these fields in the screenshot linked notably as I haven't found much about stealth in IsoZombie or IsoGameCharacter nor in IsoMovingObject
I'm not sure if there are anything else related to detection from zombies but these parameters I think would allow you to make zombies properly blind (useful in my TLOU Infected mod, or zombies fully based on sound detection). I also found getHearDistanceModifier, haven't tested what it gives, but haven't found any setter for it, so wondering if it's related to stealth too
Report
mod.info properly loads in both /common and /42 folder however poster doesn't. If you put poster in /42, the poster loads, but if you put it in common, the poster image does not load, even if the mod.info is in the same folder, it will never load the posters in /common and the posters need to be in /42
Video showing that in action:
Report / Request
The new onItemMouseHover and onScrolled functions that can be assigned in ISScrollingListBox don't match the existing pattern of a setter with a target and callback (e.g., setOnMouseDownFunction in that same file). I think these should be changed to use that pattern for consistency
Request
Custom MountOn parameter which alternative MountOn parameter
this is an example.
in the script
MountOn = Base.m9;Base.Js2000; ... (ton of moded guns); Coonfish.gun999,
MountOnText = "every firearm except bolt-action rifle and bows.",```
**in tooltip**
- if there is no ``MountOnText`` then
``` Can be mounted on: M9 Pistol, JS-2000 Pump-action shotgun, ..., Coolfish's modded assualt rifle number 999```
- if ``MountOnText`` parameter is existed in script then
``` Can be mounted on: every firearm except bolt-action rifle and bows.```
So we can increase readability and **avoid from text clipping issue** because of too many guns.
Request/Inquiry:
Why do you guys keep adding hardcoded weight limits to player inventories in java? Like if players can mod it up, why not let them? In b41 there was hardcoded limit to carryweight on character 50kg, now there are limits to bags and vehicles. Why?
Modders still going to find ways to circumvent that (I can come up with 3 ways of doing it just from top of my head) but why is that restriction there, it just makes modders life more painful. In vanilla playthrough player is not gonna surpass that anyway. And mods are there, just do do exactly that, mod the game.
Report
I added my own recipe, but the context menu is not in the correct order. In this example, both the recipe name in the translated language and the recipe setting name should be listed in ascending order as “2 -> 3 -> 4 -> 5”, but for some reason 3 is listed first. I have reviewed the recipe settings and translation settings and found nothing wrong. Please reconfirm the order in which recipes are displayed.
Report
Apparently the game doesn't update access to the UI in real time, I made this workstation
When I craft it in the EAST direction I have access to it, but if I rotate it to the SOUTH I lose access.
And re-entering the game, the reverse process occurs.
Request
I have investigated the Java source code and tried various settings, but I couldn't resolve the issue. I apologize if this is possible with an existing feature.
What I want to achieve is to configure a recipe to use "two materials randomly selected from a set of options." For example, consider the options "apple" and "avocado." I want the recipe to allow random combinations of these materials (e.g., 2 apples, 2 avocados, or 1 apple and 1 avocado). Is it possible to achieve this by specifying such conditions in the inputs parameter?
{
timedAction = UnPackBox,
Time = 10,
Tags = InHandCraft;CanBeDoneInDark,
category = Packing,
inputs
{
item 2 [Base.Apple;Base.Avocado],
}
outputs
{
item 1 Base.BagelPlain,
}
}```
Currently, with the above configuration, the recipe only triggers when there are "2 apples" or "2 avocados." As a result, I need to create multiple recipes, which leads to several issues:
- The number of recipes increases significantly.
- I want the recipes to have the same name, but in the Crafting screen, they are displayed as separate recipes.
- If there are many materials, the number of patterns increases, and accordingly, so does the number of recipes.
{
timedAction = UnPackBox,
Time = 10,
Tags = InHandCraft;CanBeDoneInDark,
category = Packing,
inputs
{
item 2 [Base.Apple;Base.Avocado],
}
outputs
{
item 1 Base.BagelPlain,
}
}
craftRecipe P4Test2
{
timedAction = UnPackBox,
Time = 10,
Tags = InHandCraft;CanBeDoneInDark,
category = Packing,
inputs
{
item 1 [Base.Apple],
item 1 [Base.Avocado],
}
outputs
{
item 1 Base.BagelPlain,
}
}```
For example, is it possible to configure something like ***[Base.Apple|Base.Avocado]*** ? (where "|" represents "or")
Request
In version B41, it is possible to access Java class variables from Lua using the getClassField method. However, the limitation is that only the fields in the specific Java class can be accessed, and fields in its superclasses are not accessible.
For example, I would like to access the worldZRotation field in the zombie.inventory.InventoryItem class, but I cannot access it from its subclass, zombie.inventory.types.InventoryContainer, in Lua. In this case, the only accessible fields are as follows:
- container, capacity, weightReduction, CanBeEquipped, MAX_CAPACITY_BAG.
Could you consider enabling access to the fields in the superclass of a class when accessing Java fields via reflection from Lua (including fields from the superclass of the specified class)? Of course, in the example above, adding a setWorldZRotation method would solve the issue, but the essence of this request is about expanding the scope of access within reflection.
Report
OnTest(sourceItem, result)
result seems to always be nil
Request: a mutator for the isoPlayer.tooDarkToRead boolean. I'm trying to make it possible for players to read while in a vehicle at night(with a dome light) so I either need to figure out how to spawn a dynamic light at player position to modify the light value of the current tile or I can just temporarily override it to true and set it back to normal functioning OnExitVehicle event.
Report/Request
OnZombieUpdate called is before base.update()
I'm trying to overwrite the angle of zombies while lunging. But the order of method calls results in my overwrite being overwritten in specific states such as the lunge state. Could the event trigger please be moved downward in the updateInternal method, so this is not the case?
Current sitatuation:
Setting the "angle" variable work in other states such as Idle and OnGround. But not in Lunge or walkTowards.
setTargetAndCurrentDirection sort of does what I want, but it seems to directly snap to the direction instead of using the animation system.
Request/Suggestion:
I just want to start off and say I'm a huge project zomboid fan. Build 42 looks great and I'm excited for what's to come! Keep up the great work!
I was hoping I could request a small hot fix or work around regarding a small issue!
So in build 42. If you contain an item in a recipe the game can not find due to not having a mod enabled the game won't open or load into a save. It'll simply crash.
So for example, I have multiple mods that contain clothing packs, I do it this way so people can pick and choose my clothing they can have without needing all the rest. My recipes are all made to be compatible with the others and without, being able to convert helmets from a "flecktarn camo helmet" or from a number of military helmets in vanilla or other mods and some materials to an "alpine camo helmet".
In build 41, if the items listed didn't exist they simply don't show in the crafting recipe as an option, can still use one of the other provided helmets the game save or server has access too.
However in 42, you need every single item to exist listed meaning for mods to work they would need to force every single other mod with other helmets to be enabled. Forcing a all mods or none of the mods approach or heavily restricting crafting recipes to be base game items entirely.
((I hope this makes sense I can clarify further xD))
Report
The mod option type Button does not properly send the arguments to onclick
function Options:addButton(id, name, tooltip, onclickfunc, target, arg1, arg2, arg3, arg4)
local option = { type = "button", id = id, name = name, tooltip = tooltip, onclick = onclickfunc, target = target, args = { arg1, arg2, arg3, arg4 }, isEnabled = true }
option.setEnabled = function(self, bool)
self.isEnabled = bool
if self.element ~= nil then
self.element:setEnable(bool)
end
end
table.insert(self.data, option)
self.dict[id] = option
return option
end
When doing an example function to print the arguments that the onclick function receives, you realize two arguments are the same:
local exampleFunction = function(target,tbl,args1,args2,args3,args4,args5,args6,args7)
print(target)
print(tbl)
print(args1)
print(args2)
print(args3)
print(args4)
-- extra arguments to show it's not in another argument
print(args5)
print(args6)
print(args7)
end
myExampleOption:addButton("button_orange", "orange",nil,exampleFunction,"1","2","3","hello world","5")
Outputs:
target: 1
tbl: table 0x1856921148
args1: 2
args2: 3
args3: hello world
args4: hello world (should be 5)
args5: nil
args6: nil
args7: nil
This means that args3 == args4 in my onclick function and that arg4 equal to "5" in the addButton is lost and not sent.
I wasn't able to find the code that handles the onclick function in the code.
Report
Mod Options problem, leaving a text entry addTextEntry blank and saving the configuration this way will break the game, making the user unable to reload its game.
In %USERPROFILE%\Zomboid\Lua\modOptions.ini, the line which breaks the game, after saving a text entry with a blank string:
textentry|myExampleOptionID|yourName|
File: media\lua\client\PZAPI\ModOptions.lua
Function: PZAPI.ModOptions:load()
Line: 292
if t[1] == "textentry" and t[4] ~= "" then
Which if it's blank, causes the other parts of the if/elseif/else to be checked instead of failing.
Modding reports, requests and suggestions
Request
Adding new electronic items to the crafts "InsertBattery" and "RemoveBattery" is currently useless because the OnCreate function doesn't accept anything but the items marked with limited tags.
Instead of limiting to these tags, I would suggest instead to add a new type of tag "HasBattery" or some sort which would automatically add any items with this tag to:
- the inputs of the crafts "RemoveBattery" and "InsertBattery"
- the OnCreate function
The OnCreate function being problematic:
-- When creating item in result box of crafting panel.
function Recipe.OnCreate.TorchBatteryRemoval(craftRecipeData, character)
local items = craftRecipeData:getAllKeepInputItems();
local result = craftRecipeData:getAllCreatedItems():get(0);
for i=0, items:size()-1 do
local item = items:get(i)
-- we found the battery, we change his used delta according to the battery
if item:hasTag("Flashlight") or item:getType() == "Torch" or item:getType() == "HandTorch" or item:getType() == "PenLight" or item:getType() == "Rubberducky2" or item:getType() == "SheepElectricShears" then
result:setUsedDelta(item:getCurrentUsesFloat());
-- then we empty the torch used delta (his energy)
item:setUsedDelta(0);
item:syncItemFields();
end
end
end
How I add new items to these CraftRecipe:
local craftRecipes = getScriptManager():getAllCraftRecipes()
for i = 0,craftRecipes:size() - 1 do
local craftRecipe = craftRecipes:get(i)
if craftRecipe:getName() == "InsertBattery" or craftRecipe:getName() == "RemoveBattery" then
print("found recipe")
local inputs = craftRecipe:getInputs()
for i = 0,inputs:size() - 1 do
local input = inputs:get(i)
if input:hasFlag(InputFlag.IsEmpty) or input:hasFlag(InputFlag.NotEmpty) then
print(input:getPossibleInputItems())
if not input:canUseItem("TLOU.InfectionScanner") then
local possibleInputs = input:getPossibleInputItems()
possibleInputs:add(getScriptManager():FindItem("TLOU.InfectionScanner"))
end
end
end
end
end
Report
Context menu options in the Zombie Population map (debug menu) do not work and throw an error:
LOG : General f:1198, t:1735776754332> -----------------------------------------
STACK TRACE
-----------------------------------------
Callframe at: zpopClearZombies
function: onMouseUp -- file: ISContextMenu.lua line # 90 | Vanilla
LOG : General f:1198, t:1735776754332>
The reason is that this line (90, ISContextMenu.lua)
option.onSelect(option.target, option.param1, option.param2, option.param3, option.param4, option.param5, option.param6, option.param7, option.param8, option.param9, option.param10);
throws more parameters than accepted by zpopClearZombies(cellX,cellY) (the option.param = nil)
To prove that, I intercepted coordinates it tried to clear of zombies (42,36) and tried running it in the debug Command Console:
zpopClearZombies(42,36)
This doesn't error out, and clears zombies. But if I add one more parameter like option.onSelect does:
zpopClearZombies(42,36,nil)
It throws the exact same error
LOG : General f:130599, t:1735777289073> -----------------------------------------
STACK TRACE
-----------------------------------------
Callframe at: zpopClearZombies
function: console -- file: spawnpoints.lua line # 1 | Vanilla
LOG : General f:130599, t:1735777289073>
Request
Is there any chance that we can get an official model and rig for both male and female characters in FBX format?
The game uses .X models and animations by default, which Blender and other free alternatives do not support. While many talented people have ported over the current model and rig to formats that we can easily use, it would be better to have official versions for modders to use.
Having an official model and rig in FBX format would be beneficial for the community, and help facilitate better looking clothes, animations, posters/art, etc.
Please. A template for animal armature types. In FBX Is extremely important to modmaking freedom and game longevity.
Request
For slider type options for mod options, add an input box next to the slider to type an exact value. Making the slider a bit longer would also help in chosing more precise values.
I agree with request above. something like this. it's too pain when step is 0.1 or 0.01. it becomes really user-unfriendly design if you throw only slider bar..
Request
For Item OnCreate, can playerObj/container be passed down as an arg? The additional info would be very useful for conditional item creation that is based on player state or location.```
Request
Add more events for animals for modders to use.
For example:
OnAnimalDeath
OnAnimalUpdate
I think currently I've only been able to find OnClickedAnimalForContext
OnAnimalTracks
Request
Getter and setter functions to set zombie stats.
This would involve the ability to change for each zombies:
- strength
- toughness
- cognition
- memory
- sight
- hearing
Currently accessing some of these isn't possible, and setting some of these involve trickeries with changing sandbox options before refreshing the zombie.
Report
Player characters not rendering correctly in vehicles when using showPassenger = true,
eg: see attached image.
mod: https://steamcommunity.com/sharedfiles/filedetails/?id=2965267102 (if needed for testing.)
Request
Add two new fields to mod.info for b42
- bugUrl; to give a link in the game where players could report bugs within a mod. URL whitelist should include discord.gg, github.com, gitlab.com, bitbucket.org, trello.com, and others you decide.
- donationUrl; to make it easy for users feeling kind to donate to a mod author. URL whitelist should include patreon.com, subscribestar.com, ko-fi.com, buymeacoffee.com, and others you decide.
additionally, make it easier to understand what the current "url" field is for.
I think both of these new fields will help keep modders happy going forward.
REPORT
If you messed your script like second screenshot , Game just turned off itself without any warning while loading the script files when starting your game.
Console doesn't say mod name or script line. it only says craftRecipe name like you can see my screenshots,
Can be exploited, if you do what i did, or just put some special character.. player will never be able to track which mod is wrong.
edit) This problem was not caused by wrong parameter name. so that inputs and outputs mean nothing.
Instead, SkillRequired:[Perk]=[Level] was the actual problem.
= <<
Report or request...
These two functions
getAmount()
getPerk()
doesn't seem to work.
I'm not a skillful modder, mean i could be wrong but i can't imagine the reason why it doesn't work and only returns non-table error.
edit) I heard it's something not exposed. can we get access of this?
Request
I'm updating a somewhat popular mod (furry mod, about 100K users) to b42.
I was investigating if it was possible to get rid of the clothing approach now that b42 has animals with custom models.
However the Java method ModelManager#getBodyModel(IsoGameCharacter) ignores HumanVisual#setForcedModel and just uses the default player models.
Given b42 is in development, I wonder if we could have a backdoor to allow for player characters to honour HumanVisual#setForcedModel? As far as I can tell, just checking if getForcedModel() != null and returning it if so would suffice.
Report
I thought the following recipe was feasible for how to execute a recipe in any inputs combination, which I recently requested. And I tried it, it works as intended on the recipe menu and I can choose any combination I want. The menu also has the craft button activated, but nothing is executed when the button is clicked. Check it please.
{
timedAction = Making,
time = 10,
tags = InHandCraft,
category = Cooking,
inputs
{
item 1 [Base.Apple;Base.Avocado],
item 1 [Base.Apple;Base.Avocado],
}
outputs
{
item 1 Basel.JamFruit,
}
}```
Report
Furthermore, in the above recipe, if the “Available Items” on the right side of the menu is manipulated, there are no more targets to choose from and the recipe becomes unworkable, even though I have the required number of materials.
Report/Request
I’ve encountered an inconsistency in how CraftRecipe and SpriteConfig components handle global functions in entity scripts. Specifically in CraftRecipe, you can't use global functions with dots but in SpriteConfig, functions with dots do work fine. For example:
entity FloorBeigeCarpet
{
...
component SpriteConfig
{
isThumpable = false,
OnIsValid = BuildRecipeCode.floor.OnIsValid,
OnCreate = BuildRecipeCode.floor.OnCreate,
...
}
component CraftRecipe
{
OnAddToMenu = BuildablesExpansion.BuildMenu.carpetFloorTest,
timedAction = SewingCloth,
time = 200,
...
}
}
In CraftRecipe, using something like OnAddToMenu = carpetFloorTest works fine, but trying OnAddToMenu = BuildablesExpansion.BuildMenu.carpetFloorTest fails.
(credit to @albion for identifying this)
It seems the issue stems from the way the code handles this. The relevant CraftRecipe function just calls _G[CraftRecipe:getOnAddToMenu()], which doesn't support table-based functions. However, tables do work fine for SpriteConfig, which suggests this inconsistency could be addressed.
I've reviewed the requests, taken some of them into account, and some will be in the future. Some of the requests were rejected. Applications are still being accepted, write them here.
My general biggest wish is that every function gets exposed in api. Especially ClientControls for car steering.
I also wish that functions that have parameters of a given class also work for derivatives of that class (liskov principle). Example is spotted function that takes isogamecharacter as a parameter but it does not work on isozombie. Similarly isozombie as a passanger in the car leads to problms. Looks like the abstraction of isogamecharacter is great but it have never been tested on all derivative objects. Isogamecharacter has empty moodles so if you substitute isoplayer with isozombie it crashes the game. This could be solved by adding ifs at least. I can provide a complete list of small improvements.
Thank you Aiteron!
Any chance if we can get a color-code reaction on suggestions? Like 🔴 is a no-go (or not a bug if it's a report), 🟡 under consideration (or will be investigated further if it's a bug report) and 🟢 planned/will be added eventually (or will be fixed if it's a bug report)
Also thanks for the update on the process
Request
getVehicleLocationBySQLID(SQLID) - Would be great if there is an API that can interact with the game's vehicle.db and retrieve related information from it. AFAIK, only the vehicle.db has the most accurate information about vehicles. You basically not able to access any vehicle objects once the residing cell is unloaded thus getting current locations of these vehicles are pretty much impossible.
Report
transmitModData() doesn't push the data out to the clients for vehicle object on b41, at least doesn't work for MP. Not sure if it has been fixed in B42. I know you can do a workaround for it, I did by using sendClientCommand to explicitly tell the client to set/update the getModData() for the vehicles but it did be nice if it is working.
Request
Allow mouse cursor to be changed dynamically:
As of now, we can only replace the mouse cursor texture before the gamestart. It cannot be changed there after. Having to setCursorVisible on every player update then render a texture in place has performance issues.
--setNativeCursor not exposed
function Example.crossHair:changeCursor()
local fileLocal = "cursor_proto.png"
local defaultCursor = Mouse.loadCursor(fileLocal)
Mouse.setNativeCursor(defaultCursor)
end
--defaultCursor not exposed
function Example.crossHair:changeCursor()
local fileLocal = "cursor_proto.png"
Mouse.defaultCursor = Mouse.loadCursor(fileLocal)
Mouse.initCustomCursor()
end
--mouseCursorTexture not exposed
function Example.crossHair:changeCursor()
local fileLocal = "media/ui/cursor_proto.png"
local cursorTexture = getTexture(fileLocal)
if cursorTexture:isReady() then
Mouse.mouseCursorTexture = cursorTexture
end
end
Events.OnGameStart.Add(function()
Example.crossHair:changeCursor()
end)
Request/Report
There isn't much API related to animSet while I know there are exploits on those xml files. It did be nice to have more related APIs so we can make some cheat detections out of it unless you plan to fix the exploits in B42.
Request
APIs to store and retrieve items as it is to table like global mod data or mod data. As of now, there is no known method to store these live objects and retrieve them much later. Some forms of serialization and deserialization methods would be nice, allow possibility to create some mods pertaining to player's collected, used and modified (due to mods) items.
Request / Suggestion
Please reconsider the removal of the global getUrlInputStream function. I understand why openUrl was nerfed to only accept Steam, the PZ website, and the TIS website, although it seems a bit at odds with the change to allow discord.gg urls for mods. I don't understand why this one was removed altogether, though. People have asked how to do requests other than GET requests in #mod_development before & the response has always been "you can only do GET requests." A new response of "you can't make requests unless you read & write to a file to communicate with an external script" will be even more disappointing.
I understand that this was likely done for security reasons, but there are better ways to achieve that. An off-by-default server/game option* for "are HTTP requests enabled", for example, would make it so that mods that use requests still work, with an extra step for the end user (alternatively, a domain allowlist). If you do add it back, it'd be nice to have a more thorough set of options for requests, too (GET and POST would be nice at minimum, but setting the more granular info like the method, headers, and body via a more general "request" function would be great). Sorry if this functionality just moved somewhere else & I missed it, by the way—if anyone knows that that's the case please ping me in #mod_development!
* future edit: a command-line option would also work, if there's concern about a malicious actor toggling the option from Lua
Request
I would like to have a blank line in front of each model element in the Attachment Editor in Debug mode when saving (Save) the adjustments to the model file. I am concerned that only the model file has a different format since the other script files are formatted to include blank lines. (It's hard to modify by hand when there are so many models...)
Report
Validation Logic for IsoEntities
The current validation logic for IsoEntities appears to have a flaw when handling multiple layers. Specifically, it checks if the square above exists (z + zz), which will always fail when the square is in the air. This behavior makes such configurations invalid even when they should be logically acceptable.
component SpriteConfig
{
skillBaseHealth = 500,
face W
{
layer
{
row = fixtures_railings_01_5,
row = fixtures_railings_01_6,
row = fixtures_railings_01_7,
}
layer
{
row = fixtures_railings_01_4,
row = fixtures_railings_01_15,
}
}
}
server\BuildingObjects\ISBuildIsoEntity.lua L358 - L375
for zz = 0, face:getzLayers() - 1 do
for xx = 0, face:getWidth() - 1 do
for yy = 0, face:getHeight() - 1 do
local tileInfo = face:getTileInfo(xx, yy, zz);
local sq = getCell():getGridSquare(x + xx, y + yy, z + zz);
if tileInfo then
--if tileInfo and (tileInfo:getSpriteName() or tileInfo:isBlocking()) then
if not sq then
return false;
else
if not self:isValidPerSquare(sq, tileInfo, zz == 0, yy > 0, xx > 0) then
return false;
end
end
end
end
end
end
Issue Description
The nested loop iterates over layers (z + zz) and validates whether a grid square (sq) exists for the calculated coordinates. However, when the layer being validated is above the ground (e.g., in the air), the getGridSquare function returns nil, causing the validation to fail.
This logic seems to disregard valid scenarios where objects might logically exist in mid-air, such as multi-level constructions or decorative elements.
Events.EveryOneRealLifeSecond.Add(function) - Nice to have. While it is possible to run game tick then calculate the time arithmetically but end of the day, it is still time complexity. If 400 mods do that, then, you will get as much time complexity ontop of the arithmetic already done on java side. So yea, I don't think is hard to have that extra event on the already existing java update event function. Most importantly, hopefully reduce the abuse of game tick by modders who simply don't care.
Request
Addendum (or maybe counter) to this: as mentioned by albion (#mod_development message) it'd be nice if there were a simple way to set up timers without needing events. i.e., something akin to setInterval & setTimeout
Request
Refreshing sandbox options while in debug mode does not update the sandbox values. Can this be fixed so we don't need to restart to refresh sandbox options?
Request
Add bitwise operations to LuaManager.GlobalObject
Kahlua is based on Lua 5.1 and does not provide those. It would be nice to access Java's operators through the following methods in LuaManager.GlobalObject: bitShiftLeft(), bitShiftRight(), bitAnd(), bitOr(), bitXor(), bitNot(). Modders end up writing their own suboptimal implementations over and over, like in this thread for example (bonus comment by Fenris).
Tiny improvements - Guns Unlimited store has rooms marked as storage rooms not as stores. Also Greene's in Muldraugh shop should have actual door to the shop.
Report
Shotgun damage deals way too much damage due to the multiple bullets shot from it. This makes any zombie with high amount of health get one shot even when having 50 times the health of a normal zombie while a crappy M16 will take longer to take it down. And this isn't even taking into account the fact hitTime which while every shotgun pellets doesn't increase independently the hit time, you still end up ramping up the damage every hit.
To put in perspective, in B41 it would take ~20 shotgun shots to take down a zombie with zombie:setHealth(50). Today, the same amount of shotgun shells remove 10000 HP (zombie:setHealth(10000)) ! In comparison, it takes 7 full M16 mags to take down such an absurd amount of health, which is 210 5.56 bullets.
I even made a system which would only take into account the first shotgun pellet which is shot, by skipping the other 8, and it still required a health of 100 on the zombie to tank ~26 shells. I'm not even mentioning the fact that the number of pellets that hit depend on your aiming level and all these tests were done at level 6 aiming.
This makes it that you basically can't balance anything for low and high aiming level together because if you set health too high to tank the 9 pellets that take down the zombie super quickly, a low level character won't even hit 9 pellets, making him take ages to take down the zombie.
Forum report as requested:
https://theindiestone.com/forums/index.php?/topic/78193-4202-rev25282-shotgun-damage-too-high/
Asked by SinisterZomboid to report it in the forums. Version: [42.0.2] Mode: [Singleplayer] Server settings: [N/A] Mods: [During mod development] Save: [New Save/Old Save] Reproduction steps: 1. Set zombie health to a high value by doing zombie:setHealth(HP_value), during my tests it was 50 and 1...
This sounds like a bug. The MinDamage/MaxDamage of the shotguns found in items_weapons_firearms.txt likely all need to be divided by the factor difference between B41 and B42.
Submit bug reports by following these directions:
https://theindiestone.com/forums/index.php?/topic/43261-read-here-first-bug-reporting-guideformatting/
The Indie Stone’s Bug Hunting Guide [Information] To help us narrow down and solve bugs faster, this guide will save everyone significant time if used correctly. Before posting a report, please use the search function to see if another member has already posted a topic about the same issue. Dupli...
Request: expose FMOD or options to add sounds to sound events/voices
From what I found, it seems there is no longer a way to add sounds to sound events related to zombies in FMOD, yet with traces of being able to do so from Lua via the SoundBanks.lua file. Today, the only way to have good quality sounds that adapt to what the zombie is doing is only by replacing the bank files with the zombie sounds, which is absolutely not viable due to the limitations of no automatic download available, and the bank files getting possibly rewritten with new sounds after updates.
I think more than a few would appreciate FMOD stuff being more exposed to modders, notably to add custom voices to zombies, which allows different zombie sounds in the game, without having to constantly set the emitter voice, and having to do checks of what situation the zombie is in, for every single zombies, which is quite the performance hazard.
As such an option which would allow to link a sound file to a custom voice (instead of the default MaleA, FemaleA, MaleB...) and to specific sound events, would be appreciated not only for people trying to achieve custom zombie sounds but also possibly modders trying to add more options to reaction sounds or idles sounds of players, such as walking around, climbing fences and more.
Also found out animal sounds use the FMOD events it seems like, this might be a major block to modders making custom animals.
Report
Teleporting the player from "Interact" -key (or pressing at the same tick while teleporting) causes errors in CButcherHook_Interact, CHutch_Interact and CBed_Interact with player:getSquare():getAdjacentSquare(dir), when teleporting outside currently loaded area.
Can be reproduced without mods by using the debug mode map and spamming Interact while teleporting.
(My quess is the square is temporarily nil)
Report
During development of a mod, I tried to access squares of a chunk when they get loaded in. However IsoChunk:getSquaresForLevel(level) can error out even for the right range of min and max levels the chunk has.
In this code, I balance the load of the action of accessing the squares across some few ticks, however even when accessing the square array within the correct range (getMinLevel() and getMaxLevel()), Project Zomboid errors on the java side, trying to access a specific level.
This can easily be reproduced by moving around the map quickly (fast move), but I also manage to get the error by driving in a car, as we can see in the videos.
Request
Expose a FluidContainer's collection of FluidInstances
At the moment it's hard to determine what's in a FluidContainer; in order to figure it out I would have to test it for each type of fluid available in the game, record which fluids are inside, and for each recorded fluid get the amount. Conversely, if I were to have access to the FluidInstances contained inside, I could get each fluid type and amount together.
This would help modders write simpler, easier to maintain, and more performant code using one of the biggest additions to B42
Request
Add Boredom to SealedFluidProperties & Expose
This doesn't exist in the current build. This makes consumed fluids unable to give boredom, while foods can.
I would like a mod that you can turn your headlites from lowbeams to highbeams and back to lowbeams.
Not entirely sure what's happening from what I've tested, but it seems like the loadModAfter parameter in mod.info causes some issues with the auto sort button in the mod load order menu.
Mod1 require = BaseMod
Mod2 loadModAfter = BaseMod
Pressing auto will move Mod1 to above BaseMod but Mod2 will be deselected if it was originally above BaseMod
loadModBefore also sorts some mods properly but for others it will move the mod to the end of the list but I've not been able to find out why
the issue is present as of 42.1.0, this makes it impossible to develop mods without using proton which is insanely slow at booting/loading the game compared to native
present as of 42.1.0
Report
OnWeaponHitXp doesn't always trigger after OnWeaponHitCharacter for every types of guns as seen in the log file provided which prints the event name when it happens. (tested as player shooting a zombie with a shotgun here, but same result for a M16 too)
This forces us users to make our own "event" which triggers a tick later with the informations of attack retrieved in OnWeaponHitCharacter. The damage value that was outputed by OnWeaponHitXp was also wrong in 42.0.2, not corresponding to the actual damage dealth from players to zombies, which forced us to calculate the actual damage dealt to the character by keeping track of its health OnWeaponHitCharacter and seeing the changes on the later event OnWeaponHitXp, but here we're just straight up forced to calculate it in our own event which triggers a tick after OnWeaponHitCharacter
Request
Improved handling of script parse failures
Update 42.1.0 made some changes to the syntax of recipe scripts, and the old syntax now triggers a game crash if debug mode is enabled. It's also possible for bad data in a script to cause the parser to give up and load a game without reading any more scripts, causing a game to load but breaking every modded item. (not a new problem, one I've encountered before when making a typo in a script file)
I'd like to request better handling of bad data from the parser. Ideally:
- If the data is not understood but the overall file structure is OK then trigger an error to console and skip just the item with bad data
- If the overall file structure can not be parsed due to a syntax error then trigger an error to console and continue to parse other files
The goal of these changes is prevent a single problem in a script file (item. recipe, vehicle, etc) from crashing the game or corrupting a save.
Report
As of 42.1, the request was accepted and introduced in the update in the form of the UsesBattery tag, thank you for that.
However, the OnCreate function lacks the check for the UsesBattery tag:
-- When creating item in result box of crafting panel.
function Recipe.OnCreate.TorchBatteryRemoval(craftRecipeData, character)
local items = craftRecipeData:getAllKeepInputItems();
local result = craftRecipeData:getAllCreatedItems():get(0);
for i=0, items:size()-1 do
local item = items:get(i)
-- we found the battery, we change his used delta according to the battery
if item:hasTag("Flashlight") or item:getType() == "Torch" or item:getType() == "HandTorch" or item:getType() == "PenLight" or item:getType() == "Rubberducky2" or item:getType() == "SheepElectricShears" then
result:setUsedDelta(item:getCurrentUsesFloat());
-- then we empty the torch used delta (his energy)
item:setUsedDelta(0);
item:syncItemFields();
end
end
end
Thus, the battery gets removed, but the item never loses its charge. Are those checks even needed actually ?
This is not the case for inserting a battery.
function Recipe.OnCreate.TorchBatteryInsert(craftRecipeData, character)
local battery = craftRecipeData:getAllConsumedItems():get(0);
local flashlight = craftRecipeData:getAllKeepInputItems():get(0);
flashlight:setUsedDelta(battery:getCurrentUsesFloat());
end
Report
As of 42.1.1, addVehicleDebug and addVehicle functions are not working correctly. Vehicles spawn in wrong coordinates. They seem to spawn always close to the player, but not on the indicated square, (testing this on mac)
local vehicle = addVehicleDebug("Base.CarLights", IsoDirections.N, nil, square)
local vehicle = addVehicle("Base.CarNormal", square:getX(), square:getY(), square:getZ())```
Request
Since IsoObjectPicker.ClickObject isn't exposed, UIManager.getPicked is effectively unusable from Lua. Could we have UIManager.getPickedObject, or something like that, which returns the tile field of ClickObject?
Request
A Java implemented function to convert Java ArrayLists to Lua tables
Modders often need to minimise function calls, especially java calls, as these have a hefty overhead. Because of this, working with ArrayLists (and other Java collections) can be very expensive as we must pay this overhead for every single iteration/operation. A function implemented entirely in Java that converts these into a table would allow us to read from them while only paying this overhead once. This would be a pretty simple addition but would allow us to optimise interactions with nearly every part of the game's API.
present as of 42.2.0, same for modOptions.ini and ModOptions.ini capitalization inconsistency
~~# Report/Request
It appears that we're unable to override the base vanilla idle animations with modded ones any longer in B42. When triggering a custom animation, the default idle animations continue to play despite the animTrack being properly triggered. And despite any available .xml parameters used. The animation is being properly fired based on my debug prints of the currently active animtrack and based on my experiences as seen in the video attached below demonstrating that my custom animation (the arms flaring out to the side) still attempts to play when interrupting the default idle with a side-step or transitionary animation.
I'm uncertain if this is unintended behaviour, but it is my assumption that it's either an oversight of one of the changes to the animation system, or unintended regression, as it prevents any custom idle animations from being utilized going forward. And it would be deeply appreciated if this can be looked at or resolved, as it greatly limits the abilities of players to create custom animations.~~
Request
Add fixed fonts that do not depend on user settings.
For example, something like UIFont.FixedSmall, UIFont.FixedMedium, and UIFont.FixedLarge.
This would help maintain consistent UI design regardless of user font size settings.
It would also make modding UI elements much easier.
Request
Potentially controversial due to overhead from an additional call, but please consider using select('#', ...) + unpack in ISBaseObject:triggerEvent() instead of having another arbitrary limit (albeit one that's larger than the typical 4)
Request
setZombiesDontAttack makes the zombie not to attack the player but it will still follow the player, the biggest problem is that it pushes the player. Did be nice to have something like setZombiesIgnorePlayer. Using ghost mode or invisible would make the player invisible from other players, not a good workaround. Programmatically telling the zombies to not target the player would put extra load on the already potato computer, if they are using potato computer.
Request
can you add a flag for workshop.txt, something like
overrideWorkshopDesc=false
so if it's true then steam workshop description will be overriden by workshop.txt and its description=
otherwise, ignore description=
I don't know this is possible technically but it's really annoying when I missclicked and blew my 1 hours work of texts
Present as of 42.3.0
ModOptions.ini was fixed, thank you! 
As of 42.3.0, this is not fixed
Request
This isn't something that really applies right now, but I figured I'd request it anyhow. TL;DR: I'd appreciate it if you'd expose more of the chat-related Java classes & make chat more easily moddable, especially ahead of the potential changes re. disguises teased a while back.
Some more specific chat wishlist items:
- It'd be nice if all the chat classes were exposed. (
ChatManager,RangeBasedChat,SayChat,ChatElement, etc.) - Chat messages could have associated mod data which could optionally be included when sending a message & transmits to other clients. (This would make it so we don't have to encode invisible characters for data)
- More control over how chat messages are sent over the radio would be nice, especially with respect to whether messages are scrambled. Alternatively, it'd be nice if the original unscrambled text were stored in the message object
Report
This needs to be seriously fixed, it's printing over 20k lines in the console everytime it triggers....
Another miscellaneous: [LUA]ISCheatPanelUI:addAdminPowerOptions() calls [Java]IsoAnimal.toggleExtraValues() which means instead of the extra information being based on the tickbox it gets toggled every time the cheat menu opens. The java functions IsoAnimal:setExtraValues() and IsoAnimal:getExtraValues() are missing the static keyword, so they will cause an error when used.
Report
ISEquipWeaponAction.lua
function forceDropHeavyItems(character)
if not character or not character:getCurrentSquare() then return end
local primary = character:getPrimaryHandItem()
if isForceDropHeavyItem(primary) then
character:getInventory():Remove(primary)
sendRemoveItemFromContainer(character:getInventory(), primary)
local dropX,dropY,dropZ = ISTransferAction.GetDropItemOffset(character, character:getCurrentSquare(), primary)
character:getCurrentSquare():AddWorldInventoryItem(primary, dropX, dropY, dropZ)
character:removeFromHands(primary)
if not isServer() then
ISInventoryPage.renderDirty = true -- for corpses
end
end
local secondary = character:getSecondaryHandItem()
if isForceDropHeavyItem(secondary) then
character:getInventory():Remove(secondary)
sendRemoveItemFromContainer(character:getInventory(), secondary)
local dropX,dropY,dropZ = ISTransferAction.GetDropItemOffset(character, character:getCurrentSquare(), primary)
character:getCurrentSquare():AddWorldInventoryItem(secondary, dropX, dropY, dropZ)
character:setSecondaryHandItem(nil)
if not isServer() then
ISInventoryPage.renderDirty = true -- for corpses
end
end
end
In the call to ISTransferAction.GetDropItemOffset for Secondary Item, is it a** mistake to specify primary as the third argument**? This implementation has been this way since B41, but the caller (GetDropItemOffset) does not use this third argument, so this does not seem to be a problem. This time, the problem occurred because I hooked this GetDropItemOffSet function in my mod and also used the third argument in the process.
Followup/Workaround
For other modders/animators. This can be worked around via the following XML parameters:
Request
player:getSteamIDString() would be nice because getSteamIDFromUsername(string) does not work on serverside.
Present as of 42.4.0 42.4.1
Report
animationMeshes defined by mods do not reliably load their animations. This is because the animations don't load if the base model (animationMesh's meshFile) failed loading or isn't loaded yet, but these are loaded asynchronously and there is nothing to ensure that they have finished loading before trying to load the animations. In practice, they only load if the mod is enabled from the main menu and the game is restarted. This bug would affect any mod trying to add a new animal. This doesn't affect Vanilla animations because they correctly wait for the meshes to load first.
getPlayerTargets()
returns isoMovingObjects or nil
getPlayerTarget()
returns isoMovingObject or nil
basically ability to fetch whatever the player is aiming at
we can getTarget() for zombies but not for player
which sucks
added:
and some sort of a way to make zombies retain data or atleast be able to identify them without relying on our current workaround methods
Request
LUA function to bypass container capacity in B42 and also a means to bypass the encumbrance limit for characters equipping items.
I know this has been requested before, but please. What was once a simple port for the Carts & Trolleys mod to B42 because the mod author iBrRus is MIA in modding has turned into a fork and taken up every bit on my free time for the last 3 weeks now. I am working every waking moment between my fulltime job and forking this mod. Often both at the same time.
I beg of you, please. I can't let everyone down by giving up, but I can't continue like this forever. I can bypass the limit the game is imposing on the carts of 37 by getting it to 50, but you can't reequip the carts past the original 37 limit until you remove items to bring it back below that number. I can do it via Java code, but then I'll never be done because I'll have to update it more regularly and help users troubleshoot problems because they didn't install it correctly.
So please, I beg of you.
Thank you for your time.
Locally installed mods (be it user's workshop or mods folder) which consist of any script.txt files still don't work on native linux version as of 42.5.0 42.5.1
Steps to reproduce:
- Place any mod which contains a script.txt file with let's say a clothing item script into user's workshop or mods folder
- Run native Linux version of the game
- Start a new game with the added mod or enable this mod for the existing save and load it
- ?????
- PROFIT
B42.5 introduces persistent coughing for smokers that happens within BodyDamage.java -> UpdateCold()
Not sure if that was intentional or not but smokers will always cough every few minutes regardless of having a cold
public void UpdateCold() {
if (this.isHasACold()) {
...
} else if (this.getParentChar().Traits.Smoker.isSet()) {
...
}
Main issue is this coughing logic is not exposed through LUA and unconfigurable if this was intentional. Setters for SmokerSneezeTimerMin/Max would also be ideal
B42.5 - Cannot use "Walk To" if dragging a corpse
B42.6 - Fixed 'Walk To' while dragging corpses
y'all are awesome! Thank you!
There is a small issue with the new option to place objects in the world. When you have two identical objects placed, if you pick up one of them, the other object forgets the position where you left it.
Request
Allow 512x512 preview images in the in-game steam workshop uploader.
The steam workshop displays the mod preview image in 512x512 in the front page mod preview, but the in-game uploader only allows you to upload 256x256 preview images. This results in the preview image being given a large black border. Currently, the only way to get around this is to use external workshop uploaders to change the preview to a 512x512 image.
Request
When we do a Save in Debug's Attachment Editor, can you lock the vanilla “models_characters.txt” to prevent it from being accidentally updated or otherwise prevent the vanilla settings from being updated? (I'm seeing some mods with strange actions because this file is being updated)
Request
I have two requests for Extended 3D Placement.
1: It is activated from the world context menu, but is it possible to activate it from the item context menu?
2: Is it possible to display the item's icon in the Operation Window? (For reference, I am showing the window of my mod that has the same functionality.)
It would be very useful to be able to activate it also from the item context menu, with only the world context menu it is difficult to activate it when there is more than one object.
Request
Safehouse related events - There doesn't seem to be any safehouse events for server when it is created or when removed. I wish there is because I would like to customize in regards to setHaveConstruction because the loot respawn has that flag that deny any zone from spawning if is flagged so. While I could override that function to check for safehouse before setting the flag (when the player build something). I couldn't set the flag when that area is removed as safehouse via expiry.
Alternative, would be nice if you implement a option to check for safehouse before loot respawning.
present as of 42.6.0
please, i just want to develop mods for my favorite game without spending most of my time by being stuck on loading screens, there's probably just some typo in the java code which causes this 
added: this happens only if directories are symlinked (thanks @wheat cipher )
Report
// zombie.characters.IsoGameCharacter#fallenOnKnees
float var6 = this.getBodyPartClothingDefense(var2.index(), false, false);
if ((float)Rand.Next(100) < var6) {
if (var5.scratched()) {
var5.generateDeepWound();
} else {
var5.setScratched(true, true);
}
}
It seems that there is an issue with the wound application logic when a character trips and falls forward (FallenOnKnees). Specifically, the comparison between the value of var6 and the random number appears to have the wrong sign (Maybe, "if ((float)Rand.Next(100) >= var6) {" is the correct code.). Due to this, for example, if a body part has no equipment, it should always receive a wound upon falling. However, the current implementation causes the opposite effect, where no wound is applied at all.
B42 has added the tag "Digital" to digital watches which controls display of the temperature/date, but the ability to set an alarm is determined by AlarmClockClothing:isDigital() which is true if the item.fulltype does not contain the string "Classic".
isDigital() should return hasTag("Digital") to make use of the tag system, or be removed and replaced by hasTag("Digital") (one use in lua, a few in clock.java)
Hey, did anyone from TIS looked at this bug report?
better yet
safehouses table instead of just 1 fixed variable per player
Report
Miscellaneous minor nice-to-fix things, not necessarily new to b42. I've decided to just update this one message with everything instead of sending new ones and clogging the channel every time I find something new 😅
ISGroupBox:new:textColoris set to an array of numbers instead of an RGBA color tableISCraftRecipeInfoBox:addInfo:_valueColoris an unintentional global referenceISAnimalTracksFinder.getAnimalTracks:ISAnimalTracksFinder.tracksis a list, but membership check acts like it's a map (or vice-versa; either way, there's a mismatch)ISButton:setOnClick,ISColorPicker:setPickedFunc, andISColorPickerHSB:setPickedFunc:arg3is added to the arguments table twice,arg4is ignoredISColorPicker:picked+ISColorPickerHSB:picked: likely unintentional global reference tomouseUpSFeedingTroughGlobalObject:OnModDataChangeItselfmethod is being set onSGlobalObjectinstead of the derived classISItemDropBox:setHighlight,ISItemDropBox:setValidHighlight, andISItemDropBox:setInvalidHighlightwon't work as intended because the first _b parameter is shadowed by the second one, so the code within the if statements won't run under normal circumstances (and, if it does, it means invalid state for the color tables)CraftTooltip:addImageDirect:textureis unintentionally set the first element of the table instead of thetexturekeyISTextBox:ISTextEntryBox:isMultipleLineis redefinedAnimalPartsDefinitions: The"doewhitetailed"definition never has its skull item set; the string is"lambsuffolk"thereCustomTileProps: one of the keys ofCustomTileProps_SetPairisvegetation_drying_01_9wddddwaw. I imagine thewddddwawpart is not intentionalISDumpContentsAction:finalItem&ISInventoryPaneContextMenu.canReplaceStoreWater2: no base case since the call toitem:getCanStoreWater()was removed; will always returnnil/false- I am out of characters
ISVehicleMenu.onRemoveAnimalFromTrailerdoesn't passanimalalong to the timed actionUITextBox2.cutToClipboarddoes not trigger the text change event, aspasteFromClipboarddoesUITextBox2.onMouseDowndoes not callsuper.onMouseDown, so it never calls the Lua methods that are called by that—so noonFocus,onMouseDown,onMouseDownOutside, oronMouseDoubleClick- In
VideoTexture.getOrCreate: if a previously loaded texture has been destroyed, after removing the texture from the loaded list it will return the destroyed texture instead of creating a new one
Let Vehicles Transport Vehicles.
Request: add an ArrayList of BaseVehicle objects to BaseVehicle called transportedVehicles with a get method that returns the ArrayList, allowing for the usual ArrayList read/add/remove operations. A corresponding transportedBy BaseVehicle field with get/set methods will track which vehicle a BaseVehicle Object is inside. BaseVehicle save() and load() methods would be updated to include this.
Purpose: to allow modded vehicles to transport other vehicles. The most straightforward example is a single vehicle transport trailer but this would also make possible multi-vehicle transporters, attaching a small vehicle to the rear of a larger one (A motorbike on the back of RV, or more excessive things like the image below)
Intended Technical Usage: The intended usage for modders would be to store a BaseVehicle in the transporter's BaseVehicle.transportedVehicles<>, then remove the 3D vehicle from the world. In reverse the carried vehicle would be spawned in the world in a nearby location and be removed from the Array. Use of transportedBy will help tell if a vehicle is out in the world or being carried, as well as allow for sanity checking when storing a vehicle.
Risks: If a loop is created by putting two vehicles inside each other then the save() method will loop endlessly, so some safety checks are advisable. Or just let that be something modders need to not do, it's hardly the only place where a mod can cause problems by doing foolish tings to the data.
The size of a saved BaseVehicle object will increase, though I don't know if that will cause issues anywhere.
Report
There's a logic error in UIElement.clampToParentX and UIElement.clampToParentY. Using clampToParentX for explanation: the second number (the maximum, currently calculated as clamped x1 + width) should be calculated based on the absolute x before clamping (x1 + width). Right now, it's applied to the clamped x1 (the minimum), so if the value differs from the pre-clamped x1, the x2 will be incorrect.
These are used in ISUIElement:clampStencilRectToParent, so it can cause inaccurate stencil rects, which allow elements to render outside of the intended area. This is particularly problematic when scrolling is involved; see attached image. Fixing the logic error Lua-side fixed this visual issue—fixing it in the Java would deal with some of the current weirdness with text box content rendering where it shouldn't.
Report
Sorry this is not a report related to the mod, I just couldn't figure out how to attach the video in the bug forum, so I'm reporting it here.
I've encountered a consistent issue related to ballistics, when shooting at both player and zombies located on the 3rd floor or higher, bullets fail to hit—unless the target is extremely close. This does not happen on the 1st or 2nd floors, where bullets behave as expected.
After investigating, I suspect this might be related to how vertical aiming vectors are calculated internally. Specifically, I noticed a magic number 2.449 (possibly sqrt(6)) is used in the native getBallisticsTargetsSpreadData() function to scale the Z-component of the muzzle direction. I believe this value may no longer be suitable due to recent high-floor support introduced in Build 42. It could be introducing sufficient vertical aiming error, causing shots to overshoot or undershoot targets above a certain height.
Report
Linux will break mod loading in ModSelector.Model:reloadMods() whenever a mod did not use proper lowercase for mod.info. This is due to java side getModInfo and functions used in it not taking into account different writtings of mod.info, which isn't an issue in Windows but is in Linux.
Request: New Steam Workshop Tag
Please add a "Bugfix" tag to Steam Workshop, so bugfix mods are better described and easier to search for.
Report
If you exit the game while grappling a corpse, it will turn in to a ball of clothed mush that you cannot interact with, except you can push it around
Report: Hardcoded Animal Value Due To Oversight
The attackAnimalTimer, which is definable within the animal definitions files, is hardcoded when the target is a player instead of another animal. This seems to be an oversight since it causes an unnecessary limitation, and also goes by the broader name attackTimer in lua definitions.
Without this variable either being split into two (one for animals, one for players), or the hardcoded = 1500.0F; for players removed, mods for Hostile animals cannot be done without awkward workarounds. This type of mod is one a lot of the community has been excited for, and it'd be a shame if it were made to be a lot more difficult (if possible at all) because of two seemingly insignificant lines.
Suggestion
Modify the OnExitVehicle event/hook call to include information about the vehicle before the player exits.
This way, you can obtain information about the vehicle before the player gets out.
In case you want to log it or perform any actions with it.
Report
In debug mode, if a mod causes a lua error during a lua reload triggered by loading a save with a different list of mods from the main menu, the debugger will open, but will not be visible due to the loading screen's fade to black effect taking priority. This leads people to believe the game has frozen/crashed, as the game will not continue loading until the debugger is closed, but there is no indication that the debugger is open.
Reproduction steps:
- Create a mod with a lua file that always causes an error on load:```lua
error("test error")
\- Add this mod to an existing save's mod list. Don't add it to the main menu mod list.
\- Load the save.
The game will hang on a black screen until you press F11 to close the debugger.
Bug Report
Exiting the game while grappling a zombie will result in a "zombie pal" upon continuing the game. You cannot interact with your "zombie pal" except he will follow you around and grunt now and then.
To reproduce: Grab a corpse. Exit the game while holding the corpse. Continue the game. The corpse is now your Zombie Pal.
This bug has been present since I believe 42.8, when the zombies would resurrect in to a ball of clothing(see my last report on 5/28). This new Zombie Pal version is since 42.10.
Forgot to add that the prisoner zombie at the end was a Zombie Pal that I had removed with debug before I recorded the video, and he had the gall to reappear after the restart.
Request: Ability to edit recipes via LUA. To be precise, I would like a setAmount function on InputScript and OutputScript, and ideally the ability to remove InputScript's and OutputScript's via LUA.
Being able to hide recipes via LUA, like isHidden = true or something.
Making new inputscript/outputscript via LUA would be a distant 4th request.
getContainerCapacity works on gas tanks and trunks. setContainerCapacity works on trunks. Can setContainerCapacity please work on gas tanks too?
local test = vehicle:getPartById("GasTank")
test:setContainerCapacity(1000)
print("Upgrading Part ", test:getContainerCapacity())
``` currently just does nothing for gas tanks except report the current capacity.
Please allow set access to https://demiurgequantified.github.io/ProjectZomboidJavaDocs/zombie/vehicles/BaseVehicle.html#engineSpeed (Ie: setEngineSpeed())
enum TransmissionNumber newTransmission (so I can use https://demiurgequantified.github.io/ProjectZomboidJavaDocs/zombie/vehicles/BaseVehicle.html#changeTransmission(zombie.vehicles.TransmissionNumber) to rewrite the rpm/transmission.
(Ideally something to turn off the standard vehicle rpm/transmission too would be nice)
Request
Unsure if API requests are still being taken here, but I've recently dipped my nose back into Zomboid modding and have hit an environment design barrier! And it seems like it's something that hasn't been mentioned here in this thread, but it's been a thing that has been sparingly asked about since at least 2020 on this Discord server. Custom Jumbo Trees.
Currently, jumbo trees are hardcoded and can't be given any new species right now. It'd be great if modders get control over these jumbo systems, this'd be a significant expansion for custom map possibilities, especially projects that might touch on Tropical, Arctic, European and other vastly different environments to Kentucky.
All we have access to are the single tile versions of the trees, which don't really speak of the sheer height that many many trees demand.
Right now, it seems the only ways modders can get custom jumbo trees are to:
-Replace existing jumbo tree tilesets with custom textures. (Which seems to be the most common method I've seen in the past. But it's not ideal if you want to keep vanilla trees for other parts of the map)
-Utilise a workaround, building each jumbo tree manually on TileZed layers with isometric cuts. (Not 'true' jumbo trees, they won't sway in the wind in one piece, won't change seasonly, and is very tedious to do for an entire swath of forestry. They also render a bit weird compared to actual Jumbo Trees.)
-Possibly make a Java mod that defines a new tree species in NatureTrees.class. (Which, by its nature as a .class file, is obviously workshop unfriendly!)
With the implementation of biomes in B42, it seems that it's a big (or even intentional?) step toward this direction with each Jumbo Tree having its own lua definition in WorldGen/features/tree. Though of course, the game fails to load a custom element in these at the moment. If we can register a new jumbo tree species entry in lua, maybe through this very biome system, it'd open the door to so much! Like beaches with full-sized palms, US West-Coast forestry, European forestry and more.
Even TileZed has an option to create a Jumbo Tree tile pack with a variable tile size. So the breadcrumbs are surely there I feel.
Ideally, jumbo tree control would grant modders the ability to add new species, have them react seasonally, physically and mechanically as your usual jumbo tree would. These could then be loaded as biome features for a custom biome, or even a vanilla biome override for the likes of further diversifying vanilla map nature?
Hope this sees some eyes, I'd go deep into some environment design if this was granted. I'm concepting an environment for when official B42 map tools get released and this is a big big want for when that time comes!
Request: Single player mod that allows you to play as 2 characters in opposite sides of the map.
I've always wanted to explore to more isolated areas, but risking my character is too much for me since I've yet to break 100 hours.
Info: Every x amount of time (determined by a slider of player's pick) you switch between the character. If you leave them in a safe location, there could be an option to enable/disable being attacked while it's sleeping.
there’s a mod kinda like this already on the workshop 😄
https://steamcommunity.com/sharedfiles/filedetails/?id=3395761583
This isn't a channel for mod suggestions
It's for modding suggestions, so modders suggestions and reports to TIS
@visual wind my bad. Deleted.
Thx
Request
Loosely related to #mod_development message, in that it's what I imagine this would look like.
The ability to register custom Capability objects that can be included in roles would be handy, to tie mod functionality to roles in a clean way. Currently it'd either have to use one of the existing capabilities or tie it to the role name itself (how it was typically done prior to roles anyway)
Edit: alternatively, some way to attach custom information to roles would serve essentially the same purpose
Would greatly enjoy if
private final BaseVehicle.VehicleImpulse[] impulseFromSquishedZombie = new BaseVehicle.VehicleImpulse[4];
private final ArrayList<BaseVehicle.VehicleImpulse> impulseFromHitZombie = new ArrayList<>();
``` where public. Along with BaseVehicle.VehicleImpulse being public
Found in BaseVehicle.Java. Required for me to fix impact impulses on heavy/light vehicles.
Request
The addition of listFilesInModDirectory in 42.1.0 was useful, but it doesn't seem like there's a way to actually read the files in the version directory, unless I'm missing something—getModFileReader paths are relative to the common directory. (getModFileWriter too, but idt people really use that anyway)
It'd be handy if there were either a parameter we could pass to getModFileReader to indicate that we want files in the version directory, or a separate function for that.
OnSpawn lua callback for items in the loot distribution table. When an item is picked for spawning, that callback will get called (If it exists for that item spawn) with the item, name of distribution table that spawned it, etc.
Could be part of the table or part of the item. Would let use customize condition/uses left/contained fluid/remove duplicates/whatever fancy stuff we wanna do to an item when it spawns.
Would likely also simplify a lot of vanilla stuff. (lessfull tag could be replaced by a callback that sets uses left if the distribution table it came from isStore is false for example, multiple containers for different fluids could be replaced by this, etc)
There is an onCreate for items, but its not given any info about the distribution table that may have spawned it. I feel like if it could reference the distribution table that spawned it, it could access a wealth of addition information someone could arbitrarily add to the distribution table to influence how that induvial item spawned.
👀
Hey!
Hopefully Fairly Reasonable, Request on ISO Animals, for Ease of Future QOL conflict avoidance,
Can we Please have a custom Easy defined way of setting up a new "Animset" Tag for Custom animals?
Eventually animal mods will encounter Heavy Conflicts or Severe issues when too many use "Doe" "Buck" etc Animsets as the current workaround,
Thanks 🙂
There's no reasons for incompatibilities to arise if you properly name your files and animation variables
indeed, still, its not just me making animals, others will someday
Still would be nice to have the ability to create custom ActionGroups of course but you should name your files with unique names, the same thing for any other files you mod in and it's impossible to get conflicts that way
it would be great to have a way to get the amount of zombies in current cell (not player cell but actual cell)
or be able to access the zombie data provided by ZombiePopulationWindow/ZombiePopulationRenderer or MPDebugInfo
thank you 🐸
Feature Request/Regression from B41 due to new systems:
Please increase the maximum number of Animation Layers in LiveAnimationTrackEntries to a higher value than 4.
It seems that some recent update to B42 (not sure which, haven't played the game in a bit while waiting for more development) caps the number of animation layers to 4 on a character. This completely breaks the mod "Fancy Handwork" in B42, to the point where I cannot continue with this limitation in place, and nerfs the community as a whole from doing more "advanced" animations.
In my case, I am applying an animation mask for both hands when items are equipped (which fixes a lot of "floaty" issues for the hand items), and thus walking + strafing + attacking means 5 animation layers are playing at once resulting in the following error and seemingly breaking the animations in general:
LiveAnimationTrackEntries.setTracks > Layer index is out of range: 4. Range: 0 - 3.
This was not an issue with B41.~~ If I need to put this on the forum as a "bug report" I can, but I'm reporting here since it's not really a "bug" with B42 since it seems intentional with this new system.~~ Still, if possible, please increase this value. Huge thanks.
EDIT: I was able to replicate this using just vanilla and 2 bags, so I have reported it as a bug on the forums. Here's hoping the resolution is to increase the number of tracks.
Feature request: New Event.
local function EveryHundredMs(timestampMs)
--some code
end
Event.EveryHundredMs.Add(EveryHundredMs)
There's many instances where OnTick (and alike) is either redundantly frequent or too heavy on performance or needs fps compensation or all of the above while EveryOneMinute is not frequent enough and also requires day length and game speed compensation.
Right now achieving the desired functionality is only possible with something like:
local timerStart = 0
local function OnTick(tick)
local timestampMs = getTimestampMs()
if timestampMs > timerStart + 100 then
timerStart = timestampMs
--some code
end
end
Events.OnTick.Add(OnTick)
Yes, such Event will always be off by the current frametime ms but that's okay.
Additionally moving a bunch of vanilla functions which don't have to be frame perfect but still have to be relatively frequent and/or decoupled from fps would also benefit game's performance, especially considering that functions which require fps compensation rely on additional calls on each frame.
A good example would be XpUpdate.lua which can be moved to EveryHundredMs almost entirely and also be stripped of all fps compensation code.
Thanks,
🐸
Noting again since it's relevant to the above request: #1318920979581501502 message
I’d like to report something regarding the Moodle UI ordering.
Currently, the vertical order of Moodle icons seems to be determined by iterating over a HashMap inside MoodlesUI and Registries.MOODLE_TYPE. Since HashMap does not maintain a defined order, the icons appear in a consistent but unintended sequence — for example, WET always shows up as the first Moodle, even though it wasn’t registered first.
Registries.MOODLE_TYPE.values() actually preserves the correct registration order, but MoodlesUI iterates over moodleUiState.entrySet(), which is backed by an unordered HashMap.
Suggestion:
Switching to a LinkedHashMap in the registry, or iterating directly over Registries.MOODLE_TYPE.values(), would allow the Moodle icons to display in a predictable, intentional order and make modding more reliable.
Additional context:
My mod “Medical Meister” performs context-appropriate medical actions when the player clicks a Moodle icon.
To detect which Moodle icon the user clicked, the mod must rely on:
- the display order of icons
- the current Moodle levels
Up to B42.12, the order was stable because it was defined by an enum.
Since B42.13, the order has become non-deterministic, and hard-coding a fixed order in the mod introduces long-term maintenance risks.
For UI/UX reasons as well, having a well-defined display order (e.g., placing more critical moodles at the top) is important for both players and modders.
Thanks for considering this improvement.
Please consider syncing the item name in syncHandWeaponFields so that weapon mods that alter names can have item names persist.
Also please allow sync of item stats such as critical chance, critical damage, max hit count, and the three aiming perk modifiers.
Perhaps splitting it to syncHandWeaponMeleeFields and syncHandWeaponRangedFields to delineate.
Report: renaming bags doesn't persist over relogins either, same with moddata saved on character and there is no sync method for it in migration guide unless syncItemModData should be used for characters as well
also another issue is that majority of players get "file doesn't exist on the client" error for some mods on files which exist and even checksum matches (resubbing doesn't help)
added: another example #1449333802420670527 message
Report: crafting recipe doesn't work in MP (progress bar freezes early in crafting progress), item itself can be spawned and used on admin and persists over sessions. In SP recipe works as intended.
example of recipe and item in used:
module SWCompanions {
imports {
Base
}
craftRecipe BecomeCompanionsWithFrog
{
timedAction = Making,
time = 50,
Tags = InHandCraft;CanBeDoneInDark,
inputs
{
item 1 [Base.Frog],
}
outputs
{
item 1 SWCompanions.FrogCompanion,
}
}
}
module SWCompanions {
imports {
Base
}
item FrogCompanion
{
DisplayCategory = Companion,
Icon = Frog,
StaticModel = FrogCompanion,
WorldStaticModel = FrogCompanion,
ItemType = base:normal,
Weight = 0.3,
AttachmentType = SomewhatSlot,
}
}
added: apparently recipes currently only work if module is Base.
Request
Expose DateFormat and NumberFormat pretty please (and maybe Date, unless there's a reason it can only be accessed in roundabout ways)
SimpleDateFormat is already exposed and meets most use cases for DateFormat, but there's no such exposed class available for NumberFormat. Admittedly this probably wouldn't be all that useful for most people & therefore isn't that impactful or high-priority. But it's an easy change that would make my life easier 🥺
(also tacking this on here: thank you for reacting to these messages Aiteron, it's nice to have confirmation that they've been seen! & thanks for your and the team's work on adding modders' requests ❤️)
When a mod is missing common folder, as is default for git clone when there are no files in it, the mod will not show up in the mod list and there will be no indication that it was rejected in debug log or console log or anywhere, AT ALL.
Please add debug logging for folder in valid mod locations which are skipped due to conditions like this. [Edit]: e.g
~/Zomboid/mods/BigGunYo!folder skipped: not a mod: missingcommonfolder or something...
Or, better yet, remove the dependancy of having an empty folder when all files are in a more version-specific one that is fully supported.
I am more bald because of this, like a little-bit-hairy egg, it's definitely a sub-optimal situation. Please fix!
Request
Add support for the newer PZNetKahluaTableImpl used for timed actions to commands (sendClientCommand and sendServerCommand). This would allow commands to identify characters, objects, items, etc without needing to rely on tediously transmitting ids and locating the objects on the other end.
Request/Report
copyFrom from IsoAnimal doesn't copy mod data, this makes it annoying to keep persistent animal data when the animal gets picked up, transformed into an AnimalInventoryItem and then the game creates a fresh IsoAnimal and copy data from that old animal into this new one. Mod data is then completely lost and wiped, forcing us to make patches and use tricks to find back our animal and add back its mod data
public void copyFrom(IsoAnimal animal) {
this.setHoursSurvived(animal.getHoursSurvived());
this.getStats().set(CharacterStat.HUNGER, animal.getStats().get(CharacterStat.HUNGER));
this.getStats().set(CharacterStat.THIRST, animal.getStats().get(CharacterStat.THIRST));
this.customName = animal.customName;
this.stressLevel = animal.stressLevel;
this.playerAcceptanceList = animal.playerAcceptanceList;
this.setHealth(animal.getHealth());
this.animalId = animal.animalId;
this.petTimer = animal.petTimer;
this.fullGenome = animal.fullGenome;
this.geneticDisorder = animal.geneticDisorder;
this.attachBackToMother = animal.attachBackToMother;
this.data = animal.getData();
this.setFemale(animal.isFemale());
this.data.parent = this;
this.wild = animal.wild;
}
Report/Request:
Current MutuallyExclusiveTraits requires:
- Both of the mutually exclusive traits have to mention each other
- Mentioned trait have to exist or it throws an error
Issues and limitations it creates:
- Currently in 42.13.1 it is possible to pick both fast and slow reader, brave and adrenaline junkie, hard of hearing with deaf, claustrophobic with agoraphobic (an oversight)
- Trait mods are required to overwrite vanilla
character_traits.txtentries if some traits have to be mutually exclusive with those - Makes it not possible to create backwards compatibility with other trait mods
Proposal:
- Make it so mentioning a mutually exclusive trait is picked up from both sides, or maybe some way to assign it, i.e. in b41 we could do
if TraitFactory.getTrait("SomeCoolModTrait") then
TraitFactory.setMutualExclusive("SomeCoolModTrait", "MySomewhatTrait")
end
- Make it skip if mutually exclusive trait doesn't exist instead of throwing an error
Thanks,
🐸
Mentioning this request as it has recently become relevant
Feature Request: Server-Side Lua Event for Item Transfers
Currently, OnProcessTransaction only fires for moveable furniture operations and floor drops. Regular item transfers between inventories (player-to-container, container-to-container) don't trigger any server-side Lua event.
Proposed: Add an event like OnItemTransfer that fires in Transaction.update() after a transfer completes, with parameters:
- Player who initiated the transfer
- Item transferred
- Source container
- Destination container
Use Cases:
- Server logging/admin tools - Track item movement for investigating duping or theft reports
- Custom anti-cheat - Validate transfers server-side without trusting client
- Economy/trading mods - Monitor item flow for shop systems, player markets
- Survival mechanics - Trigger events when items enter specific containers (e.g., community storage, faction bases)
- Quest/achievement systems - Detect when players deposit or retrieve specific items
Currently the only workaround is hooking client-side Lua and using sendClientCommand, which isn't ideal for security-sensitive use cases since it relies on trusting the client.
By default CanAttach & CanDetach fails to account for custom Weapon Parts
meaning they cant seem to be added to any weapon unless Code is made
CanAttach = ItemCodeOnTest.hasScrewdriver,
CanDetach = ItemCodeOnTest.hasScrewdriver,
What for?
hit return halfway through typing before adding in details, and apparently something was addedd in 42.13.1... just a sec
BodyLocationGroup:moveLocationToIndex() does what I was about to ask for. B42 Javadocs have not been updated and I thought my decompiled Zomboid was 42.13.1 but it was only 42.13, which is why I could not find it.
Report
I already reported this as a bug report (https://theindiestone.com/forums/index.php?/topic/72225-4202-rev-25282-file-writers-can-be-initialized-with-null); reposting here for visibility/because it's mainly an issue for modders. getFileWriter and similar "getXWriter" global functions can return a LuaFileWriter initialized with null as its PrintWriter. It should instead return null in this case
Request
Don't allow spaces and special symbols (except underscores and dashes) in mod id's, dir names and file names.
Apart from it being a bad practice in general it adds another layer of "I don't want to live on this planet anymore" when some creative person decides to set their mod id to Haha got'em. My mod is so funny!!1 and you have to manage this in a server.ini modid line with over 20 entries, where each is also separated by ;\.
Thank you,
🐸
.. About half the mods out there use spaces in filenames/dir names, and its very well supported by modern programs.
Report / suggestion
Add proper error handling for improper mod.info file formatting. Whenever something is wrong with someone's mod.info file it will throw an error on the exact line of the screenshot, with the following stacktrace:
-----------------------------------------
function: reloadMods -- file: ModSelectorModel.lua line # 67 | Vanilla
function: onMenuItemMouseDownMainMenu -- file: MainScreen.lua line # 1538 | Vanilla
ERROR: General f:0, t:1767535176892> ExceptionLogger.logException> Exception thrown
java.lang.RuntimeException: attempted index: getId of non-table: null at KahluaThread.tableget(KahluaThread.java:1462).
Stack trace:
se.krka.kahlua.vm.KahluaThread.tableget(KahluaThread.java:1462)
se.krka.kahlua.vm.KahluaThread.luaMainloop(KahluaThread.java:458)
se.krka.kahlua.vm.KahluaThread.call(KahluaThread.java:166)
se.krka.kahlua.vm.KahluaThread.pcall(KahluaThread.java:1754)
se.krka.kahlua.vm.KahluaThread.pcallBoolean(KahluaThread.java:1690)
se.krka.kahlua.integration.LuaCaller.protectedCallBoolean(LuaCaller.java:96)
zombie.ui.UIElement.onMouseDown(UIElement.java:1244)
zombie.ui.UIElement.onMouseDown(UIElement.java:1214)
zombie.ui.UIElement.onMouseDown(UIElement.java:1214)
zombie.ui.UIElement.onConsumeMouseButtonDown(UIElement.java:1497)
zombie.ui.UIManager.updateMouseButtons(UIManager.java:726)
zombie.ui.UIManager.update(UIManager.java:615)
zombie.GameWindow.logic(GameWindow.java:298)
zombie.GameWindow.frameStep(GameWindow.java:790)
zombie.GameWindow.mainThreadStep(GameWindow.java:552)
zombie.MainThread.mainLoop(MainThread.java:68)
java.base/java.lang.Thread.run(Unknown Source)
LOG : General f:0, t:1767535176892> -----------------------------------------
STACK TRACE
-----------------------------------------
function: reloadMods -- file: ModSelectorModel.lua line # 67 | Vanilla
function: onMenuItemMouseDownMainMenu -- file: MainScreen.lua line # 1538 | Vanilla
In this case, the versionMin parameter of this modder was versionMin=42 instead of versionMin=42.0 and it's abnormal that the game will just nuke itself whenever something is badly typed in the mod.info, leading modders to wander around looking for the problem, for sometimes things that are so insignificant. Add an assert or a simple nil check which throws an error when there's improper mod.info formatting please
Report
Crafting related bug report for 42.13.1 multiplayer (single player works).
When processing items in craft recipes with multiple input options (e.g. item 1 [Base.Toothpaste;Base.Clay]), and both ingredients are available in the player inventory or nearby inventories, the game will always consume the first option of the possible ingredients (e.g. Base.Toothpaste), no matter if the second option was selected as input in the crafting menu or the recipe was started via right click context menu on the second option. When starting the recipe via right click context menu on the second option, the process bar appears on the correct item in the inventory (second option), but the game still consumes an item of the first option type in the end.
It feels like the server doesn't know about the input option that was selected by the client.
^^ "Resolved internally & will be included in a future patch" - Thank you so much ❤️
Report
Uploading a mod with mod.infos in multiple version folders lists the mod id for each version in the steam description even though they are usually the same. It would be better if it only listed unique mod ids.
Report
Animal follow wall state is causing some unwanted behavior in our horse mod.
For some context; our riding system works by blocking the animal movement using animal:getBehavior():setBlockMovement(true), then setting bPathfind to true, and using directional input (WASD) and some custom logic to give the horse a target to move to by using horse:setX/Y and then the player is glued to the horse using player:setX/Y(horse:getX/Y).
The issue we have is that if the horse has no rider, and the horse is on one side of a fence/wall and gets a pathfind target to the other side of the fence/wall, if the player mounts the horse during the pathfinding to that target, it doesn't clear the target and our horse:setX/Y is overriden. Even if the horse has exited the FollowWallState and is in the pathfinding state, if it's mounted before it reaches the target, it breaks.
If the horse is mounted during pathfinding to a target that is not interrupted by a follow wall state, there's no issues.
You can see this happening in the video I attached, as soon as the horse starts walking around the wall and I mount it, our logic breaks completely and it gets stuck with that pathfinding target.
I have tried the following methods to try and clear/reset it, but none of them are working:
local behavior = horse:getBehavior()
horse:stopAllMovementNow()
horse:setIsAlerted(false)
horse:setShouldFollowWall(false)
horse:setMoving(false)
horse:setVariable("bMoving", false)
horse:getPathFindBehavior2():reset()
horse:pathFailed()
horse:initializeStates()
horse:pathToLocation(horse:getX(), horse:getY(), horse:getZ())
behavior:resetBehaviorAction()
behavior:walkedOnSpot()
behavior:update()
If the horse is allowed to exit the follow wall state and reach it's target by itself before mounted, there's no issues.
A simple method for clearing/resetting the pathfind target would be perfect.
Report
Grabbing a corpse body then dropping it again triggers OnZombieDead Lua event once more
- Create a simple Lua script loaded by the game (mod or base Lua files) with the following:
local function OnZombieDead(zombie)
print("Zombie dying")
end
Events.OnZombieDead.Add(OnZombieDead)
- Launch the game with the script loaded
- Kill a zombie, the event triggers as expected
- Grab the corpse to drag it
- Drop it and when it becomes a corpse again it will trigger the event once more
This is problematic because this event is most often used to add items to the inventory of zombies and this will force modders to add to the corpse or zombie mod data to indicate they have already added their own loot. My suggestion is to add a new event which is OnCorpseCreate which would actually be great OnDeadBodySpawn is a thing nvm because it would complete a void in the API for modders for accessing corpses in the game and at the same time only have OnZombieDead trigger when a zombie dies, a win win situation where we modders get reliables ways to both get a zombie on death and a corpse being created, which is often needed
Report
The craftRecipe with the predefined CanWalk = True, does not work adequately - the character can simply spinning around their axis, but not walk.
REQUEST - VideoTexture Support for Mod Folders
Problem: VideoTexture can only load .bk2/.bik files from the base game's media/videos/ folder, preventing modders from adding custom videos in mods.
Why It Matters:
- Animated UI elements
- Custom cutscenes/intros for total conversion mods
- In-game video content (TVs, projectors)
- Embedded video tutorials
Why It's Easy: Audio and textures already support mod directories using ZomboidFileSystem.getAbsolutePath(). VideoTexture just needs the same treatment - change getMediaPath() to use the existing mod-aware path resolution.
Compatibility: Fully backwards compatible.
📍 Full suggestion: https://theindiestone.com/forums/index.php?/topic/89939-b42-allow-videotexture-to-load-videos-from-mod-folders/
Currently, the VideoTexture class (exposed to Lua via getVideo()) can only load .bk2 or .bik video files from the base game's media/videos/ folder. This prevents modders from including custom videos in their mods for use in custom UI elements, cutscenes, or animated backgrounds. The Problem: The ...
Suggestion
Make scripts consistent in how they are written. This is a constant source of confusion and overall makes things messy to manage in general both for TIS and modders because the XPBoosts parameter here has a value field which takes equal signs to associated the values to the skill IDs, but for the craftRecipes this kind of stuff takes ID:value;ID2:value2
For comparison, this is how the skillRequired parameter for craftRecipe script block is syntaxed.
And if I remember there's plenty of other examples like that, for example the inputs script blocks for craftRecipe allows adjustements of the quantity a specific input item takes by doing [item1;count:item2], here, consistent with the use of : to associate id - value. So I'm very confused at the use of a = symbol in the new script blocks character_trait_definition to do the same. Currently working on a VSCode extension which syntax highlights and adds diagnostics for scripts and this is an absolute nightmare to handle.
Scripts have greatly improved in consistency since B42 updates and over the span of the updates being released, but even with modern recent scripts we get such inconsistencies in the syntaxes
Request/Report
Control the volume of audio played using the emitter in b42 multiplayer.
Since we don't have full access to FMOD, the only way to play custom sounds in a mod is by using the BaseCharacterSoundEmitter. These sounds ignore any sound setting in the audio options and even the volume set in the sound script, so we instead have to set the volume like this:
local sound = emitter:playSound("MyCustomSound")
emitter:setVolume(sound, soundVolume)
In singleplayer this works fine, but in multiplayer there's seemingly no way to change the volume of a sound emitted from another player.
If player 1 is playing a sound using the emitter, and player 2 is nearby, the sound will play at maximum volume for player 2.
Some additional notes; the 3D aspect of the sound works in the sense that the closer you are to the player emitting the sound, the louder it is. If I set the is3D on the sound script to false, then the sound plays at maximum volume for all nearby players no matter the distances between them.
Report (Updated Repost)
Foraging related bug report for 42.13.1 multiplayer (single player works).
When foraging for items from a module other than Base, the item spawns in the world as expected, but doesn't get added to the player inventory after picking it up. It looks like the game doesn't consider the module the item is from and therefore fails to add it to the inventory (e.g. it tries to add 'item' instead of 'custommodule.item').
Repost Update:
The issue is in ...\lua\client\Foraging\ISForageIcon.lua on Line 21:
Use: table.insert(itemTypeList, self.itemList:get(i):getFullType());
Instead of: table.insert(itemTypeList, self.itemList:get(i):getType());
42.14 Update
The ISForageIcon:doForage function was updated for 42.14, unfortunately without considering the fix from above.
Still the same issue but now on Line 22 of ...\lua\client\Foraging\ISForageIcon.lua
Client log:
[26-12-25 18:58:34.791] DEBUG: Action f:18846, t:1766771914791, st:19,914,650> ActionManager.remove > ActionManager remove action { "NetTimedActionPacket": { } , "NetTimedAction": { "type" : "ISForageAction", "name" : null, "actionArgs" : {"character": "IsoPlayer{ Name:null, ID:19 }", "iconID": "1d71751c-3e61-4fcb-a4ca-a2aba119c660", "itemTypeList": {1.0: "ammomaker_BirdExcrement", 2.0: "ammomaker_BirdExcrement", 3.0: "ammomaker_BirdExcrement", 4.0: "ammomaker_BirdExcrement", 5.0: "ammomaker_BirdExcrement", 6.0: "ammomaker_BirdExcrement", 7.0: "ammomaker_BirdExcrement", 8.0: "ammomaker_BirdExcrement", 9.0: "ammomaker_BirdExcrement"}, "targetContainer": "ItemContainer:[type:none, parent:IsoPlayer{ Name:null, ID:19 }]", "itemType": "ammomaker.ammomaker_BirdExcrement"}, "isUsingTimeout" : true } , "Action": { "id" : 14, "state" : "Done", "playerId" : { "PlayerID": { "playerIndex" : 0 } , "IDShort": { "id" : 0 } }, "duration" : 1000 } }.
Server log:
[26-12-25 18:58:34.768] LOG : General f:3173, t:1766771914768, st:19,914,630> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.768] LOG : General f:3173, t:1766771914768, st:19,914,630> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.768] LOG : General f:3173, t:1766771914768, st:19,914,630> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.769] LOG : General f:3173, t:1766771914769, st:19,914,631> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.769] LOG : General f:3173, t:1766771914769, st:19,914,631> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.769] LOG : General f:3173, t:1766771914769, st:19,914,631> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.769] LOG : General f:3173, t:1766771914769, st:19,914,631> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.770] LOG : General f:3173, t:1766771914770, st:19,914,632> Couldn't find item ammomaker_BirdExcrement.
[26-12-25 18:58:34.770] LOG : General f:3173, t:1766771914770, st:19,914,632> Couldn't find item ammomaker_BirdExcrement.
Version: [42.13.1] Mode: [Multiplayer] Server settings: [Any] Mods: [Any mod that adds foraging items from custom modules] Save: [New Save] Description: When foraging for items from a module other than Base, the item spawns in the world as expected, but doesn't get added to the player inventory a...
Report
When a skill name is localized (translated), the corresponding skill description tooltip fails to resolve its localization key and is displayed incorrectly (raw key or missing text).
This appears to be caused by the UI using the localized skill name instead of the internal perk ID when constructing the description localization key.
Please remove logspam of 'Set pitch for Instance' every time BaseSoundEmitter.setPitch(..., ...) is called. having it in 'general' at level 'general' makes it very annoying to disable. Should be 'sound' category, trace/noise level (or just removed). Also BaseSoundEmitter.setPitch takes a sound channel but changes the pitch of every sound being played on the emitter. Consider that mods that wish to change pitch for things like engine RPM will be doing it every frame and will need to make a unique emitter to not pitch bend the horn/alarm/etc played on the same emitter.
Clients experience a CTD if they aim at a zed who has zed:setSkeleton(true) in B42.13.1 and B42.13.2. This wasn't an issue in B41
Another....
If a mod calls saveGame() on a server, it writes map_sand.bin which appears to cache current SandboxVars which in turn prevents admins from being able to change their settings. I've seen it implied that map_sand.bin should not exist on the server because settings should come from the SandboxVars. Removing map_sand.bin from the server restores functionality again, but ultimately assume we don't want the file being written on a server
Repo with mvp and details to reproduce both issues: https://github.com/PhunZoider/PhunBugs
Report
Modded animals that have a different scale than 0.6 will not properly have their animalSize set when being attached on a butcher hook. The reason for that is that the Lua function which adds the corpse on the butcher hook, doesn't properly retrieve the old animal corpse to set to the new IsoAnimal instance being created
function ButcheringUtil.createAnimalForHook(hook, newCorpse)
local modData = newCorpse:getModData();
local animal = IsoAnimal.new(getCell(), hook:getSquare():getX(), hook:getSquare():getY(), hook:getSquare():getZ(), modData["AnimalType"], modData["AnimalBreed"]);
if newCorpse then
modData["originalSize"] = newCorpse:getAnimalSize();
modData["deathTime"] = newCorpse:getDeathTime();
end
animal:getData():setSizeForced(AnimalAvatarDefinition[modData["AnimalType"]].animalPositionSize)
if modData["animalSize"] < animal:getData():getSize() then
animal:getData():setSizeForced(modData["animalSize"]);
end
hook:setAnimal(animal);
animal:setDir(IsoDirections.NE)
animal:setX(animal:getX() + AnimalAvatarDefinition[modData["AnimalType"]].animalPositionX)
animal:setY(animal:getY() + AnimalAvatarDefinition[modData["AnimalType"]].animalPositionY)
animal:setZ(animal:getZ() + AnimalAvatarDefinition[modData["AnimalType"]].animalPositionZ)
animal:setOnHook(true);
animal:setHook(hook);
animal:setModData(modData)
animal:getAnimalVisual():setSkinTextureName(newCorpse:getAnimalVisual():getSkinTexture());
animal:transmitModData();
end
A fix could simply be to change or improve the logic for this code to do something like
animal:getData():setSizeForced(newCorpse:getAnimalSize())
The problem here is that animals with minSize and maxSize values in the animal definitions don't get properly set their size there
Things I wish where exposed to LUA: CarController class, return type of EvolvedRecipe:getItemsList():keySet() Set<String>
Things I wish had get() functions for LUA: BaseVehicle.throttle, EvolvedRecipe.canAddSpicesEmpty
Please add an OnPlayerFullyConnectedand OnPlayerDisconnectedevent for server
Please add isbDangerousUncooked to sendItemStats() sync.
Hello Indie Stone friends, as someone currently working on a firearms mod and wanting to implement some custom logic based on ammo types (to expand the possibilities of ammo in the game), I wish we could read tracer files from the media folder, including those that come from mod folders.
Currently, the only way to add a custom tracer file to achieve different colors and speeds is by dropping them into the Zomboid root folder.
I’ve looked at some of the decompiled code, and I assume the function that creates and reads the tracer files just needs to be changed to use:
ZomboidFileSystem.instance.getMediaRootPath()
guess that if we get to change that to
ZomboidFileSystem.instance.getMediaPath()
…then we modders could ship custom tracers within our mods,
allowing us to do some cool effects like the one in the video 
Request
It would be great to have a direct method to change the zombie type which would also sync the change with clients.
--1 sprinter
--2 fast shambler
--3 slow shambler
--4 crawler
--5 fake dead
zombie:setType(1)
Thanks,
🐸
Request
Please change sorting in "Choose Item Directory", right now it places the most recent directory at the bottom which means user have to scroll to the very bottom every time they want to update the most recent mod (which gets very frustrating very fast when testing on the server is required). Ideally the directory with the most recent changes to files within it should always be at the top.
Thanks,
🐸
Report
isAdmin() returns false on admin
Request
The logic in UITextBox2 is missing some calls to Lua callbacks. This includes both gaps within its own functionality and gaps compared to UIElement. Please add calls for these.
UITextBox2.cutToClipboarddoes not triggeronTextChange(comparepasteFromClipboard).UITextBox2.onKeyEnterdoes not triggeronTextChangefor multi-line text boxes (compareputCharacter).UITextBox2.onMouseDowndoes not callsuper.onMouseDownor otherwise trigger the various UI element mouse callbacks (compare otheronMouseXmethods). This includesonFocus,onMouseDoubleClick,onMouseDownOutside, andonMouseDown.
Technically this was already reported here (#1318920979581501502 message), but I included it with a bunch of unrelated minor stuff when I believe it warrants its own message. Also posted on the bug reports forum (https://theindiestone.com/forums/index.php?/topic/87909-42123-text-boxes-are-missing-calls-to-event-callback-functions) but it's really just a modding issue, not a bug
In Food:getActualWeight(), it would be nice if isCustomWeight() was tested first so it could override the weight of objects that have haveExtraItems()==true... though it would also require changing how usedDelta is calculated in that function to depend on Food:getBaseHunger() (or mod data) instead of the getScriptItem().getHungerChange() for my uses.
or much more generically useful: if there was some other way to have custom object weights supported (LUA callback maybe so it can change in responce to being consumed?). The InventoryItem:getExtraItemsWeight() code is incorrect and results in very incorrect evolved recipe weights (Try adding beans to a recipe, it uses 1/6th of 2KG (0.33kg) but adds 1.2kg of mass to the evolved recipe) as getExtraItemsWeight() assumes each 'item' is 0.6x the full mass of the item
Kinda feels like the whole getExtraItemsWeight() system should be replaced with moddata or something about how much ingredient weight was added. (Also would work fine for my needs if LUA accessible)
Before b42.13, in the file ItemContainer.java, it did:
} else if (this.getType().equals("clothingrack") && !(item instanceof Clothing) && !item.hasTag("FitsClothingRack")) {
Since 42.13, it does:
} else if (this.getType().equals("clothingrack") && !(item instanceof Clothing)) {
Previously, with the Tags = FitsClothingRack,, you could make any object go inside a clothingrack — for example, a hanger with ItemType = base:normal,. Please, bring back the "FitsClothingRack" tag; if you ever add vanilla hangers, you’ll need it. It can’t be that a hanger has to be a piece of clothing.