#mod_development
1 messages · Page 301 of 1
nUnholy_attachments.txt
does it matter how it's called? i was using some other mod as a reference and it had it's file called "AuthenticZLite_attachments"
Can i just... send you the files i have and you try conver them for yourself. I'd like to help further but im quite tired and will be heading to bed soon
Heavily increased the time it takes to drill out a pipe.
Added recipes to be able to forge a pipe from iron chunks/quarters.```
https://steamcommunity.com/sharedfiles/filedetails/?id=3422050461
This one is fixed. I did change it and forgot to remove that change for testing*
kk thank you very much !

I can't even get custom crops to work by copying from another farming mod
And all I learn from the console is that these two lines have a problem, but no matter what I try to do to them I get the same errors
MapObjects.OnNewWithSprite(farming_vegetableconf.sprite["marijuana"], NewMarijuana, PRIORITY)
MapObjects.OnLoadWithSprite(farming_vegetableconf.sprite["marijuana"], LoadMarijuana, PRIORITY)
This is the line being called from my sprites.lua with a placeholder sprite
farming_vegetableconf.sprite["marijuana"] = { "vegetation_farming_trampled_01b_56", }
well it just doesn't want to work heh, after removing that script file completely it works just fine
It's been some time since i created it. Try various things. Its not really something that alot of modders are actively doing so there is little to no guides i feel that talk exacly about it. Maybe wiki pages that sirdoggyjvla posted can be of help
do you know what is causing this tho
something with attachment editor. Make sure you dont have other mods enabled that also have custom attachment points
Might be that you will be overriding other mods files instead of yours
i disabled all mods for testing this
i have this same thing done for my mod that adds some holsters and that one works just fine
tho this new one is missing those 2 lines, maybe that's why? then again you don't have them either and it works fine for you
nope still an error lol 🤦
I'll check it out tomorrow.
i think that attachment editor must be broken xd
it does look broken from the way half of the menu isn't even visible
It is possibility since b42 did change it abit
oh well, i'll just rotate it a degree at a time i guess lmao, would have finished that already if i wasn't trying to use that editor probably 😂
thank you very much for your help with this tho, really appreciate what you're doing here ! 😄
is there a way to see the console in the main menu or anything? keep getting like 1-2 on launch or whenever I turn on my mod but I can't figure out why
Error Magnifier
ty
Is there any way to send keyboard input to the game from lua?
I'm trying to cancel the reading action from lua but no luck - so far the only way is keyboard input. I've tried forceCancel, forceComplete, and removing from the queue directly
local character = getPlayer()
local taQueue = ISTimedActionQueue.getTimedActionQueue(character)
if taQueue and taQueue.queue and #taQueue.queue > 0 then
local currentAction = taQueue.queue[1]
if currentAction then
table.remove(taQueue.queue, 1)
currentAction:forceComplete()
currentAction:forceCancel()
print("!Completed: Force stopped action")
end
end
For detecting a keypress, use the OnKeyPressedEvent
Here's my change sandbox options script, with key 26 being [
local key = _keyPressed
-- print(key)
if key == 26 then -- If you want to change the key, you can change this number
-- SandboxOptions.new()
if ISServerSandboxOptionsUIover.instance then
ISServerSandboxOptionsUIover.instance:close()
end
local ui = ISServerSandboxOptionsUIover:new(150, 150,800, 600)
ui:initialise()
ui:addToUIManager()
end
end
Events.OnKeyPressed.Add(changesandboxoptions)```
(code stolen from the change sandbox option mod, with the context menu stuff stripped out)
Just sharing my new standalone mod manager https://steamcommunity.com/sharedfiles/filedetails/?id=3422448677. Any feedback be great 🙂
I'm trying to do the opposite - make a lua script press a key
Oh, the reverse. Obviously in that case:
desserPyek_ = yek lacol
(yek)tnirp --
rebmun siht egnahc nac uoy ,yek eht egnahc ot tnaw uoy fI -- neht 62 == yek fi
()wen.snoitpOxobdnaS --
neht ecnatsni.revoIUsnoitpOxobdnaSrevreSSI fi
()esolc:ecnatsni.revoIUsnoitpOxobdnaSrevreSSI
dne
(006 ,008,051 ,051)wen:revoIUsnoitpOxobdnaSrevreSSI = iu lacol
()esilaitini:iu
()reganaMIUoTdda:iu
dne
dne
(snoitpoxobdnasegnahc)ddA.desserPyeKnO.stnevE```
I would have throught that the various forceCancel, forceComplete etc would do the job but you've tried those... guess they are more of a "you've been cancelled, so now cleanup"
Did you start this mod after beginning to read in a car and getting stuck?
LOL I literally just saw that in a vid but no
dangit, sir, dangit
just found what works:
local taQueue = ISTimedActionQueue.getTimedActionQueue(character)
taQueue:clearQueue()
So the character cancels everything instead of managing the action directly... makes sense now you've figured it out.
yeah - and thanks for the reverse answer it gave me hope 
hahahahhaa
I don't always have useful answers, but I always have sarcasm and silly jokes. 🤪
can ya'll tell me what file i have to look in to see how to add skills
If you don't get answer here there are a few mods that add skills so you can check how they do it.
There's a Scavenging skill mod for B42, not sure how many others have made it to B42.
i found the Scavenging skill mod but after i subscribed to it it didn't aper in the modding menu
and without that i cant see what file its in 😦
Anyone know if there's a working mod for build 42 that lets you start in Louisville?
Did it download files to C:\Games\Steam\steamapps\workshop\content\108600\XXXXXXXXXX (where XXXXXXXX is teh mod id, in the URL on steam)
(path will differ if you installed steam somewhere other than c:\games\steam)
There is, filter for "build 42" and "map" and there are several.
A warning: Louisville is still laggy if you drive around and most of it hasn't had a big glow-up like Mauldraugh/the new map areas, but the tall skyscrapers are fun to start in.
Thank you! The tall skyscrapers ae exactly what I want to check out.
if you just want to cancel reading action, make this function return false
local hook = ISReadABook.isValid
function ISReadABook:isValid()
if IWantToCancelTheAction then
return false
end
return hook(self)
end
this will break the action, return hook(self) at the end instead
oh thank you for noticing btw what is different between? I actually tried 3 or 4 times both and couldn't feel any difference.
but i want to know clearly so I can avoid writing incorrect code at other similar situation.
So if you have some time, can you teach me shortly? or some links?🥺
(I haven't tried with TimedAction tho)
this function needs to return true or false depending on whether the action is valid. if you just call hook(self) and don't do anything with the return value, it won't return anything and you break the action
thank you nice albion i think i understood why.
I added custom farming crops which work fine except the console is throwing 2 errors when I load a world that seem harmless but I can't get them to go away and I don't understand anything in the errors except for the two lines it references
MapObjects.OnNewWithSprite(farming_vegetableconf.sprite["Marijuana"], NewMarijuana, PRIORITY)
MapObjects.OnLoadWithSprite(farming_vegetableconf.sprite["Marijuana"], LoadMarijuana, PRIORITY)
I don't know how they could be incorrect when everything works as intended, except I can't see the seeds icon in the sow menu which I'm pretty certain isn't related
What is the full lua file using those calls
In particular, are you sure that farming_vegetableconf.sprite["Marijuana" is a string matching the world object name and NewMarijuana is a function?
Well...
I finally tried to comment the two lines out on a whin and everything still works perfectly
So
Uh
Yeah
I'm comapring Marijuana to Broccoli... lets see if anything stands out.
They use MapObjects.OnNewWithSprite(farming_vegetableconf.sprite.Broccoli, NewBroccoli, PRIORITY) so slightly different syntax, but if I understand lua tables correctly foo.Broccoli and foo["Broccoli"] will do the same thing. I'm guessing you have another function that puts the values into farming_vegetableconf.sprite ?
if you do print(farming_vegetableconf.sprite["Marijuana"]) in the lua console what does it show?
should say "table"
With the two lines commented out or still in?
After you load data into farming_vegetableconf.sprite
So just run the game and try it after it loads.
won't matter if the lines are commented out or not for this test
We're just trying to make sure that farming_vegetableconf.sprite["Marijuana"] is a table, not nil or a string or something
Yes it does
I have it defined in another file
farming_vegetableconf.sprite["Marijuana"] = { "vegetation_farming_01b_56", "vegetation_farming_01b_57", "vegetation_farming_01b_58", "vegetation_farming_01b_59", "vegetation_farming_01b_60", "vegetation_farming_01b_61", "vegetation_farming_01b_62", "vegetation_farming_01b_63" }
I'm not sure why it hates your version
As far as I can tell everything works fine
Without those lines
Soooo
I'm just gonna keep on rolling
Makes sure you leave the area and travel a way away and return, and also save/load the game
They look to have soemthing to do with making a new plant and loading it again later
And try again after a growth stage
I even teleported away and reloaded then teleported back
Everything is still sound
But I checked and even other mods include those commands

Blame the war on drugs targetting marijuana
Freaking Nixon
can anyone help me find which lua and where it is that determines sounds according to speed with vehicles. im able to get my start vehicle sound to play, but the game doesn;t understand when i am idleing vs driving. so my vehicle just plays engine sound constantly. i tried to go off of a mod i found that had lua written to play idle sound when under 15km per hour and engine sounds after that but when i put it in my mod it didnt work. i want to see how the vanilla game does it
all i can find for vanilla vehicles is the scripting where it calls for the engine start and the engine sounds. cant find the idle sound, and cant find the lua or whatever makes the game know the difference between idling and drivingh
ive been struggling at this ALL DAY
For reference I was using the Sherman tank mod
All I wanna figure out is how to make my vehicle play my idle sound when I’m idling 😭
Wait so what was the issue? Couldn’t sow the seeds? @drifting ore
There was no issue other than the errors appearing
I commented the two lines out that were mentioned in the console and the errors went away and the mod is still fully functional
So
Did you make custom sprites for your plant? Or using a vanillas?
Vanilla placeholders, I am making custom sprites
Ahh nice, I have just been using vanilla hemp with plans to modify later.
I didn't know there was vanilla hemp 😂 what is your mod called?
I just used the tobacco since I based everything off of that
vegetableconf and sprites can go in same file, and yea for real i get that. I was gonna maybe make indica sativa and hybird plants and just change the hues lol so like
im still trying to code farming ui menu
Yeah exactly
Give them some variety for each strain
There is a ton you could do with that
yea for real, the OG author was def ambitious of the mod im trying to update. but like guy even had a genetics thing in the works
🤯
have you set up the open seed/put seed away packet recipes already?
I don't have it set to pack away, only open, but yes
idk if you plan to add more than one plant, but if ya do and more than one seed packet, i figured out the vanilla seed mapper with the help of the community yesterday 
follows vanilla recipe pattern and makes it easy to add more, just gotta make sure the item def is set proper
and seed packets have growing seasons attached to them as ya know
what does it mean when a mod keeps failing to update to the workshop?
it can happen if the description is too long
This was it! Thanks so much ❤️ 🙂
Thats a thing?!
just a heads up if ever thers anyone working on forage related mod, the time action params are different for b42
There's a Steam description limit yes
There's also a limit on the size of the preview.png image - (bytes, not dimensions). I found that out when GIMP refused to compress my PNGs and they were too big to upload Rimworld mods without using another program to re-save them.
But with Zomboid previews being standardized as 256x256 the size limit isn't a major issue!
You can ignore that limitation with a Steam Workshop uploader
In fact you can even have gifs
hey is there a mod for buld 42 that is similar to superb npcs? i have been looking and i cant seem to find anything
whatcha tryna do?
Just trying to add something in it
how about the bandits mod?
i have it instald and im making my way threw the week one mod but i would like to recruit and build a party with some npcs. i just came back to the game and superb npcs was a staple mod for me
Hello! Irrc, there was a way to mod a custom lua event. Does anyone know how exactly this is done or a resource explaining it? What lua code do I need for this? Thanks!
honestly im thinking about reverting my game virsion back souly for the mod
can't you do that with the bandits mod (week one)? if so try recommending it here:
https://discord.com/channels/136501320340209664/1307047640453877780
Why not use Bandits
In B42
you can tell them to join and they’ll fight with you
Thats all they do, if you are talking about bandits
In Bandits non-Day or Week you need friendly ones, hostile ones always hostile
does the guardpost keybind do anything?
Why aren't these popups translating?
IGUI_Achievement_SockBroke = "First Thread",
IGUI_Achievement_SockBroke_Description = "Break your first pair of socks.",
IGUI_Achievement_ShoeBroke = "First Tread",
IGUI_Achievement_ShoeBroke_Description = "Break your first pair of shoes.",
IGUI_Achievement_SockBroke_50 = "Fifty Thread",
IGUI_Achievement_SockBroke_50_Description = "Break your first 50 pairs of socks.",
IGUI_Achievement_ShoeBroke_50 = "Fifty Tread",
IGUI_Achievement_ShoeBroke_50_Description = "Break your first 50 pairs of shoes.",
IGUI_Achievement_SockBroke_100 = "Hundred Thread",
IGUI_Achievement_SockBroke_100_Description = "Break your first 100 pairs of socks.",
IGUI_Achievement_ShoeBroke_100 = "Hundred Tread",
IGUI_Achievement_ShoeBroke_100_Description = "Break your first 100 pairs of shoes.",
IGUI_Achievement_FootAngel = "Foot Angel",
IGUI_Achievement_FootAngel_Description = "Reach a less than zero chance of sock damage.",
IGUI_Achievement_BrokenShoePain = "Sole Splitter",
IGUI_Achievement_BrokenShoePain_Description = "Suffer pain from stomping in broken shoes.",
IGUI_Achievement_NoSocksPain = "Blistered",
IGUI_Achievement_NoSocksPain_Description = "Suffer pain from stomping in shoes without socks.",
IGUI_Achievement_WetSocks = "Threading Water",
IGUI_Achievement_WetSocks_Description = "Wear wet socks.",
IGUI_Achievement_WetShoes = "Treading Water",
IGUI_Achievement_WetShoes_Description = "Wear wet shoes.",
IGUI_HaloNote_Sock_Break_Notify = "Socks Broke",
IGUI_HaloNote_Shoe_Break_Notify = "Shoes Broke",
}```
hi guys! I wanted to start modding PZ but I'm not sure how I could check if my code is correct, is there any extension to show erros or add auto completion? where can I find the classes, methods etc that I can edit/access? other games I modded had extensions that helped with this so I'm feeling a bit lost here 😅
What's the lua code that generates the popups?
If you use getText("IGUI_Achievement_NoSocksPain") it will return the translation, or "IGUI_Achievement_NoSocksPain" if it can't find one.
Also check
https://pzwiki.net/wiki/Modding
Also don't hesitate if you think a few bits are unclear on the wiki, I'm interested in getting some feedback
VS Code with the Umbrella plugin is a huge timesaver, especially if you want autocomplete (I feel like I'm fighting it just as often as it helps)
To make a custom Lua event you need to attach it to a vanilla event.
The most simple and unoptimized way is:
Events.OnTick.Add(function()
if (condition_met) then
trigger_custom_event()
end
end)
I’m using addTextWithArrow
They may also be non-event code you can hook into. For example if you wanted to make a character catch fire when they finished reading a book, you could hook into the complete() function of the timeaction for reading.
True.
...I don't know why that was the first example I thought of.
Try addTextWithArrow(getText("IGUI_Achievement_NoSocksPain")
Or whatever the syntax is for addTextWithArrow
addTextWithArrow(playerObj, getText("IGUI_Achievement_NoSocksPain", true, ...)
What's the custom event you want to add? We might be able to give more specific pointers or examples for you.
Using onTick was smth I already thought about but as you write, I am afraid that it may be not the most optimized way to do this. I still think there was some other event specific way to do this (but maybe I don't remember correctly and confuse smth in my mind...)
Yeah that looks like it will work. Ill check it later, resting atm. Thanks.
Oh uh, any thoughts for things that should be forgable or smeltable? Been hopping between mods im working on.
Anyway your custom event should be based on a specific condition. The way depends on that.
Optimization and universality always contradict each other. So more context is needed.
What about things you can convert to scrap metal and smelt? Car parts for example.
My required custom event is quite similar to onClothingUpdated but triggered on slightly different positions in the code (vanilla onClothingUpdated is not usable for me anymore, it was usable in B41 but isn't in B42 anymore). Main problem in my situation is that the event should be triggered by functions in the shared folder while it is required that adding stuff to the event is possible in the client folder.
So like, scrap them down into scrap metal and then melt the metal or just melt the car parts?
...I should finish up my "diassasmble non-wrecked cars mod"
It works, just needs translation for context menu text and a few variabels moved to sandbox vars and teh packaging/preview image/etc
I was thinking you sit down with a hacksaw (tags:sawmetal) and cut the pieces up into scrap metal, then can smelt that. Felt like it made more sense than smelting pieces directly.
Or use a bandsaw and do it super quick, but until we can move those things that's not going to see much use
Are the Lua functions really marked as client or shared? And what's "adding stuff to the event"?
The client/shared/server thing is (mostly) like those bins with a hole for recycling and a hole for rubbish and underneath it's all one garbge bag.
If you can describe exactly what you want to trigger your code, we can help you find out where to shove it.
If onClothingUpdated is not available at "shared" stage, you can add it later at "client" stage.
Why not?
"add stuff to event" = Events.OnClothingUpdated.Add(myfunction) (i.e. adding a function to the event)
For the client/shared issue: In theory, I simply could put all my modded code to the client folder and then solve the issue without events. Problem is that the relevant code which should trigger the event are TimedActions and in B42, most TimedActions are now in shared. So, when I simply put them client, I am afraid that this could later mess-up things when multiplayer is added to B42...
Btw, onClothingUpdate can be triggered in shared code (that is also done in the vanilla code), so that is not the problem. Problem is that B42 changed the structure of some of the code which results in the situation that onClothingUpdated is now triggered too early for my mod. See my previous message for a more detailed description: #mod_development message
client and shared are just for your organization of code files.
You can keep you code in shared.
Firing an event early shouldn't cause errors, right?
Sounds like you can add a postfix patch to the complete() part of the timed action to have your code run when you want.
Is it possible to add an item that will have the same ItemID as another item? I'm trying to make a mod that adds "Bone Nails" but implementing them in recipes seems impossible since there isn't a "Nails" tag or something of the sort. All vanilla recipes just use "Base.Nails", which is the vanilla nails. Is there a way to work around this? Do I simply make my mod a recipe that creates regular nails instead even if its a little unimmersive?
I say "postfix patch" but that's not really the proper term... basic idea is you replace complete() with your own function that calls complete(), then runs whatever adiditonal code you want before returning whatever the original function returned.
local too_early = true
function EventStuff()
if too_early then return end
.....
end
function EnableEventStuff()
too_early = false
end
Alternatively is it possible to make a vanilla item in the game use a different icon and name even if it hase the same ItemID as an existing one
You could add Tag:nails to to Base.Nails and then programatically edit every recipe that uses nails to use tag:nails instead... but there are so many ways that could break even without the constant changes to the recipe system I wouldn't do that.
That's exactly what I plan do and this will solve my problem. Problem is that the TimedActions are in shared and the code I'd like to postfix is in client and therefore I thought that using an event might be better here. Btw, my postfix code should not only be applied to vanilla TimedActions but also to my own custom TimedActions (which are also in shared)
Yeah I thought about that. Compatability error too if god forbid a single other modder touches one of those recipes.
Also you could just add event stuff at the moment that isn't early in client but it will be:
local function EventStuff()
EventStuffInShared() -- already defined
end
no error but it simply doesn't work for my mod anymore
but anyway, if Zomboid's lua does not provide predefined commands to define custom events, I'll pbbly just keep all my code in client and solve the problem that way
Another solution I thought of but I'm unsure if possible is through code. I'd first need to figure out if what I want to do is possible, but essentially it'd just look for that particular "Carve Bone nails" recipe, which by itself just gives regular nails. The script would change the icon and name of the recipe's outputs. I think having it renamed might be possible but I'm unsure on the icon feature
Essentially the recipe gives you regular nails but it changes their name and icons of it's outputs, but again I've no idea if this is even possible
It is possible to have cosmetic variations of an item, but I don't know if having a variation means Base.Nail ails will pick one at random every time one is created.
I guess I have to test it. Do you know how cosmetic variants of items are made? Or at least any mod that does so, that way I can take a look at it
Albeit I think vanilla already does this with certain hammers
Well, actually you can add a custom event handler but it will be strange and not necessary, something like that:
local event_functions = {}
Events.OnMyCustomEvent = {}
Events.OnMyCustomEvent.Add = function(fn)
table.insert(event_functions, fn)
end
-- Other stuff for custom event handler
.....
Here, I’m using Events as a global variable. It can be any global variable used to connect the client and the shared state.
That's not really how you do it
Don't use globals
🪖 Are you interested in becoming a contributor to the Support Corps mod? Now you can. I am looking to form a small modding team that would allow the mod to grow much larger than it can if I did it alone.
I can teach you basic Zomboid modding for scratch, but if you have experience with modding or LUA then you are surely welcome!
If you can work or edit 3D models or do graphics then you are also welcome.
If you are interested then please message me privately to get started!
"Lua" (pronounced LOO-ah) means "Moon" in Portuguese [...] "Lua" is a name, the name of the Earth's moon and the name of the language. Like most names, it should be written in lower case with an initial capital, that is, "Lua". Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people.
I don't typically care for prescriptivism but it feels warranted whenever I read “LUA”
why's it so common anyway? nobody says JAVA
I'd guess it's because it's three letters & people are used to 3/4 letter acronyms, but that's a shot in the dark
Lmao that's a thing 
Damn
probably that lol
is there a way to adjust the sound level and still call is in a square? Currently using this method: square:playSound("LightSwitch")
Yes, the first line must start with module…
yup
anyone know how i could go about making my cybertruck in game be battery charged
Does anyone know a mod to remove this trash (without sledgehammer) please?
Alternatively, does anyone cna point out a good mod to start with, to make a new one that will do this?
With B42 ideally, I would add a context menu entry to pick a plank or unusable wood here.
If you just disable adding fuel normally (maybe disable the gas tank area?) and add fuel using only setContainerContentAmmount() with some "charging" method, the player won't know if it's fuel or electricity. You can also create new gas tank part and name it battery pack for example
decided to port ExtraEletricalTraits myself
this is the .lua it provides
require('NPCs/MainCreationMethods');
local function initExtraElectricalTrait()
local geek = TraitFactory.addTrait("Geek", getText("UI_trait_geek"), 4, getText("UI_trait_geekdesc"), false, false);
geek:addXPBoost(Perks.Electricity, 1)
local tinkerer = TraitFactory.addTrait("Tinkerer", getText("UI_trait_tinkerer"), 6, getText("UI_trait_tinkererdesc"), false, false);
tinkerer:addXPBoost(Perks.Electricity, 2)
end
Events.OnGameBoot.Add(initExtraElectricalTrait);
what changed from B41 to B42?
OnPlayerUpdate seems like an expensive operation to add a listener to. I'd like to maybe check it every nth time unit, but I want to make sure I use an efficient time obj. Any ideas on efficient time objects? I'm thinking @LuaMethod(name = "getTimeInMillis", global = true) public static long getTimeInMillis() { return System.currentTimeMillis(); }
for its native call efficiency but unsure about the lua-java conversion efficiency
The answer depends on how accurate you need the timings to be; there are quite a few events that run less often than OnPlayerUpdate, but they have varying frequencies
Methods like the one you mentioned can help with the timing; they will be an additional Java call, but if it's happening infrequently that's not all that bad
Options: use everyminute instead if that is often enough. Or Use a really simple tick counter:
local doEveryNTicks = 20
local ticksElapsed = 0
function myUpdateFunction(player)
if ticksElapsed < doEveryNTicks then
ticksElapsed = ticksElapsed +1
return
end
<your stuff here>
end```
That way it's just an integer comparison & integer math when your function code is not used.
No system calls needed.
yeah that's what I started doing but was feeling too lazy when I asked the question to think through some other stuff I'd have to consider with the approach
everyminute?
There is an event that fires minute of game time. Depending on what you need to do, sometimes that is often enough.
EveryOneMinute
Why does changing BloodLocation cause such dramatic problems? The first two of these work fine. The third throws java errors, strips everyone naked, deletes all underpants in the world and causes spawning a new pair of underpants to throw a lua exception when it checks to see if your underpants are actually an animal corpse.
i dont think you need the comma when using doparam
true, but it works with the comma.
i mean it sounds like its causing errors lol
I've had similar issues replacing the whole item and adding BloodLocation, though I've not tried that today.
I'll try it without the commas
ive not had any issues changing bloodlocations on my modded items so idk
...apparently some things work when you leave the comma in, and BloodLocation is not one of them .
Thanks
And I will once again 1) complain about the parser being unable to handle any deviation from what it expects gracefully and 2) remember Rimworld's XML system fondly. 😂
Still can't rip them up via the "rip clothing" recipe but I guess I can sew leather strips into them now so that's something.
I wouldn't be shocked if the recipe parser makes a list of everything with a certain tag on load and refuses to re-check on the asumption item tags never change.
it does
Is there any way to get the actual items (outputs) generated by the recipe execution from any client side script other than OnCreate?
I can do this by monitoring my inventory and TimedAction for item increases/decreases, but I am looking for a smarter way to do this.
What is your goal? You can probably do it by hooking into the timeadaction:complete() function, but that feels like it will be a lot more cumbersome than OnCreate.
I want to get the opened cans, after performing the action (recipe) of opening the cans.
ISCraftAction:complete() is where the outputs get added to your inventory (or the floor)
Replace that with a custom version that does a "<if item == OpenCan then do stuff>" in the loop through list, right after local item = list:get(i);
I can't see a good way to do it via prefix or postfix patch, but that may be possible deeper in, in RecipeManager.PerformMakeItem
Thanks to your help, I have gotten the answer!
P4PickingMeister.Actions_addOrDropItem = Actions.addOrDropItem
function Actions.addOrDropItem(character, item)
P4PickingMeister.Actions_addOrDropItem(character, item)
print("Result is " .. item:getType())
end
Much better place for the coe than my suggestion too.
And obvious now someone else has said it. 😆
Aight, new issue, can't seem to enter any of the seats now, the bar loads for 1 second and dissapears, i also need to open the door manually, the seats and areas seem right, did anyting regadring changed in B42???
Hey modders funkers 
Could I seperate my Tiles (.pack and .tiles) and make it standalone, then use it for my mods with a require so that I can add tiles in the future and use it for several diffrent mods, so that players/admins can choose to use either mods independently, just with the same tile/pack requirement.
My mod contains traps with fire, and my tileset is on 2 rows. I plan to make another trap mod without or with minimum fire. And also add more tiles to the tileset to use something else.
The Idea is to not create more tileset since the unique ID is limited. and for optimization.
Would updating the tiles mod affect saves / servers or such ?
Also: noticing thump sound is generic, even when it's metal generic. is there a way to set the sound or the type of the item/tile so that the sounds adjust to it. (has Metal or such?)
Question for mod im making: I want to make the premiumtech generator (Generator_Yellow) never lose durability. Setting ConditionLowerChanceOneIn to 0 does nothing, and I could always just turn ConditionLowerChanceOneIn up to 99999 or something, but I would prefer if there's a way to actually make it unable to ever lose durability instead. Does anyone know the best way to do that?
try -1
or just try removing that param entirely
This is what I mean by not being able to enter it.
Aren't there normally little icons indicating the door entry/exit positions on that diagram?
If something went wrong maybe the game doesn't know where the player needs to stand to use a door.
Those little blue door icons. (ignore that the P19 Oshkosh has weird seating, that's the first image I found)
ill check it, the script is fine, maybe the areas are messed up
position inside is the square, position outside is the door.```
passenger FrontLeft
{
door = DoorFrontLeft,
door2 = DoorFrontRight,
area = SeatFrontLeft,
showPassenger = true,
hasRoof = false,
position inside
{
offset = 0.0000 0.8750 -0.3375,
rotate = 0.0000 0.0000 0.0000,
}
position outside
{
offset = 0.3375 -0.0250 -0.3375,
rotate = 0.0000 0.0000 0.0000,
area = SeatFrontLeft,
}
switchSeat FrontRight
{
sound =,
}
}
And that's seperate to the area that draws the green rectangle for the doors?
Since that doesn't look like enough numbers for a rectangle.
Anyone know why developers used GUID for their VHS scripts? Why not have the scripts all on one file instead of them making another translation file
Because the dev who coded it liked that method and ten years later it's not a priority to change.
Is anyone friendly with context menu?
When I right-clicked item, print(item) or RNGBackpack.doRandom(item) fires immediately even i don't click actual option yet.
Here is my code for context menu
function RNGBackpack.DebugOption(playerNum, context, items)
if not isDebugEnabled() and not SandboxVars.RandomBackpackCap.DebugEnabled then
Events.OnFillInventoryObjectContextMenu.Remove(RNGBackpack.DebugOption)
return
end
-- if #items > 1 then return end
local item = items[1]
if type(item) == "table" then
item = items[1].items[1]
end
local isValidItem = item:getCategory() == "Container" or item:getCategory() == "Backpack"
if isValidItem then
--local debugOption = context:addOption(getText("Randomize Backpack Capacity (From RNG Backpack Mod)"), item, RNGBackpack.doRandom(item));
local debugOption = context:addOption(getText("Randomize Backpack Capacity (From RNG Backpack Mod)"), item, print(item));
-- This part is the problem. 3rd arg fires when I opened context menu. when i don't click option yet. ######
end
end
Events.OnFillInventoryObjectContextMenu.Add(RNGBackpack.DebugOption)
but when I copied and pasted ISInventoryPaneContextMenu.AutoDrinkOn to 3rd arg,
then AutoDrink was only enabled when I clicked my option.
I don't know what is the different.
fck me lol sigh
https://steamcommunity.com/sharedfiles/filedetails/?id=3419268636
Added an overhead notification when shoes/socks break alongside a cloth ripping sound
Added the achievement version, adding in achievements for Braven's Achievements```
Hey, so, I'm starting to make some form of mod, and I have a question.
I'm thinking of making a very basic project for my first time.
I'd like to basically do 2 items :
- import the b42 stag skulls into B41, and allow them to be used as headgear (basic bitch, I know)
Is that something that's possible ?
Second thing is much more simple (I think?)
- Reskin a crowbar into an antler
I think the most complicated part about that would be making the headgear and antler model
yeah but you would need to weigh it to the player's head, wouldn't be that hard
I don't know much about making clothes in zomboid, but I think a helmet specifically would be easy since there's only 1 or 2 animation bones that need to be considered
weighing a model to animation bones is just how you tell the game
"this part of the model moves with this part of the animation"
Got it
you can just transfer weights from the body in blender so you don't have to do anything yourself
Oh god blender again-
it's really simple once you figure it out, just import player model, import the skull, position it where you want, select body then skull, ctrl+p to parent it, then select body then skull, enter weight painting mode, select weights, transfer weights, set to nearest face interpolated and source layers by name and that's it
i learned that in some youtube video
I added a SkillRequired Woodwork to craft the handle, but why isnt it showing that it's required in the crafting menu?
craftRecipe Make Katana Handle
{
time = 500,
category = Survivalist,
SkillRequired = WoodWork:5,
xpAward = Woodwork:10,
timedAction = Making,
Tags = InHandCraft;CanBeDoneFromFloor,
inputs
{
item 1 [Base.Plank],
item 1 [Base.Saw] mode:keep,
item 2 [Base.LeatherStrips],
item 1 [Base.Woodglue],
item 1 [Base.Twine],
item 1 tags[CarpentryChisel] mode:keep flags[MayDegradeLight;IsNotDull;Prop1],
}
outputs
{
item 1 Base.Katana_Handle,
}
}
oh wait, i think it needs carpentry tag
its not...
sample vanilla recipe
Bruh, the vehicle editor dosen't open, im literally breaking the game
oh wait, bruh the W is capital🤦♂️
average coding experience
Does this look good? regarding the seats issue : passenger FrontLeft
{
showPassenger = true,
hasRoof = true,
position inside
{
offset = 0.1755 0.0532 0.0000,
rotate = 0.0000 0.0000 0.0000,
}
position outside
{
offset = 0.5479 -0.1596 0.4787,
rotate = 0.0000 0.0000 0.0000,
area = SeatFrontLeft,
}
}
I can't seem to get these to appear, very strange issue if you ask me.
Does anyone know whats wrong with my recipe file? Whenever i try loading it, it either doesnt load or straight up craashes the game.
module Base
{
craftRecipe MakeHardtack
{
timedAction = Making,
Time = 150.0,
Tags = AnySurfaceCraft;Cooking,
category = Cooking,
xpAward = Cooking:10,
inputs
{
item 1 tags[RollingPin] mode:keep flags[MayDegradeLight],
item 1 tags[Fork;MixingUtensil;Spoon] mode:keep flags[MayDegradeLight],
item 1 [Base.Bowl] mode:keep,,
item 1 [Base.Salt],
item 1 tags[Flour],
-fluid 0.5 [Water],
}
outputs
{
item 1 Base.AVIHardtack,
}
}
}
item 1 [Base.Bowl] mode:keep,,
Double comma
God damn it
I’ll try, thank you!
can anyone help me figure out what is wrong with the code here?
local function OnZombieDead(zombie)
if zombie:isReanimatedPlayer() or not zombie:getVariableBoolean("Bandit") then return end
local inv = zombie:getInventory()
local invItems = zombie:getInventory():getItems()
local specificWeapon1 = nil
for i = 0, invItems:size() - 1 do
local item = invItems:get(i)
if item and item:getCategory() == "Weapon" then
local gun = item:getFullType()
if not specificWeapon1 then
specificWeapon1 = gun
print ("weapon1 ".. specificWeapon1)
elseif specificWeapon1 then
if gun == specificWeapon1 then
print ("weapon1 remove ".. specificWeapon1)
inv:Remove(item)
specificWeapon1 = nil
end
end
end
end
end
Events.OnZombieDead.Add(OnZombieDead)
it's supposed to locate duplicate weapons on the dead body and remove them, and it seems to work, but i get this error too:
[08-02-25 19:06:30.600] ERROR: General f:313, t:1739041590600> ExceptionLogger.logException> Exception thrown
java.lang.reflect.InvocationTargetException at GeneratedMethodAccessor62.invoke(null:-1).
and i don't get any prints
Is there a way to identify if a zombie is a sprinter or not?
In lua specifically
https://steamcommunity.com/sharedfiles/filedetails/?id=2922443751
Cuz this mod is nice but I wanna make a version that only activates the code on sprinters, since the two mod contributors do not show interest in an option for sprinters only
the entire mod is just this code
I figure if there's a way to identify if IsoZombie is a sprinter, then I could just put that into the if statements and call it a day
maybe try getSpeedMod e.g.
if instanceof(character, 'IsoZombie') then
if character:getSpeedMod() == 1.1 then
seems are some functions related speed or sprinting but not gonna say anything about those because I've never tried.
however, this is a simple idea when pretend there's no function to check sprinters, you can pick by voice type? sprinter has different voice effect vs normal zombies.
I am now working at one mod, but I don’t know the name of desktop computer in the game, so in code I just write “Desktop Computer” is it correct?
I suggest you to put print(worldobjects:getName()) in loop.
you will be known what will be returned and you can use it instead of Desktop Computer(when desktop computer is wrong)
does anyone know why my models won't work? I keep getting this error
WARN : General f:541, t:1739045742159> MeshAssetManager.loadCallback > Failed to load asset: AssetPath{ "WorldItems/Food/GlassJug_Ground" }
i tried putting it into worlditems but it doesn't work either
Wdym "blank" mod ?
Basically a template mod, you know - how everyone accidentally uploads a template. 😅
No, and they probably shouldn't to be honest - as it led to alot of people, again, accidentally uploading it lol.
Anything with a mod id of 'mod template'
idk what r u doing but this one might be useful
p.s. timers use not a in-game time but real one
https://steamcommunity.com/sharedfiles/filedetails/?id=2875394066
i did some more testing of my code:
local function OnZombieDead(zombie)
if zombie:isReanimatedPlayer() or not zombie:getVariableBoolean("Bandit") then return end
local inv = zombie:getInventory()
local invItems = inv:getItems()
local specificWeapon1 = nil
for i = 0, invItems:size() - 1 do
local item = invItems:get(i)
print ("!")
if item and item:getCategory() == "Weapon" then
local gun = item:getFullType()
if not specificWeapon1 then
specificWeapon1 = gun
print ("weapon1 ".. specificWeapon1)
elseif specificWeapon1 then
if gun == specificWeapon1 then
print ("weapon1 remove ".. specificWeapon1)
inv:Remove(item)
specificWeapon1 = nil
end
end
end
end
end
now i get the !, weapon1, and weapon1 remove prints, then an error:
function: OnZombieDead -- file: BanditAddOptions.lua line # 138 | MOD: Bandits Extra Options.
[08-02-25 21:27:26.172] ERROR: General f:444, t:1739050046172> ExceptionLogger.logException> Exception thrown
java.lang.reflect.InvocationTargetException at GeneratedMethodAccessor62.invoke(null:-1).
something in the inventory is reacting badly to the elseif clause, if i comment the elseif clause out theres no problem
I don't know if this is your problem, but don't remove things from a list/array you're iterating through.
is there any software yet that makes B42 tiles?
i want to add tents/sleeping bags, but TileZed still doesn't have that.
Your for loop will go off the end of the inventory, because there are fewer items now so get(i) will not be happy at the end.
Anyone know offhand what a "unit of fluid" is? Is it 1 mL?
I think normally one litre
But if you told me it's a litre in some functions and a mL in others and a flOz in this one place i'd believe you.
that's probably it, thank you!
Is there any write up anywhere that details the properties on weapons?
I made a spreadsheet of all of the vanilla weapons and I found some oddities, and was looking to find out what some of the properties actually do. For example:
AimingMod = 2,
Aiming mod only exists on shotguns, but NOT on the Sawed off JS-2000. Which is a weird outlier.
and
ToHitModifier = 1.5,
is on all weapons other than shotguns, EXCEPT the Sawed off JS-2000 which has it at 2.5.
I wonder if "aimingmod 2" is what makes shotguns completely incisor of shooting crawlers
Meanwhile I can aim my rifle at a zombie's head and it will hit a chicken on the ground then bounce up to hit the zombie.
Right now I don't think anyone understands the goal of the new aiming system, and that includes the devs. 😦
I'll have a look at decompiled java later because I'm curious about AimingMod now
I'm thinking I'm probably going to share the spreadsheet too when I get it finished, because its nice to be able to see all the stats at once.
it looks cool
I like it a lot, it just feels like they are doing things at random
Like making toHit instead do random damage
And suddenly bullets are doing much less damage when you shoot a zombie
Instead of rewarding the player for the skill to make a headshot, it decides to make the shot hit a limb instead. No fun.
to make my loop happy, do i have to mark the things i want to remove and then remove them afterwards?
Yes, make an empty list before the loop and put things in it
Then go through the list and remove those after
it works, i think
thank you!
I think in the java it is isozombie.speedtype which is an int that is 1 for sprinters, but that is not exposed normally.
If you install starlit library it has some magic that lets you access the fields in java classes, so once you have the zombie object zombieObj.speedtype == 1 will work. I think.
Just wondering if there is a way to make it so a fluid container can only accept one type of fluid .. like water?
I don't thing AimingMod does anything. It gets set to 1.0 by default, it gets set when an item's properties are loaded if there is an AimingMod line (2 for a few shotguns, 0.8 for a lot of melee weapns), there's a HandWeapon:GetAimingMod() to get the value... but nothing actually uses it.
So 1) I'm wrong, which is very possible 2) it's dead legacy code or 3) it is supposed to be part of the new aiming system but it not yet implemented.
Already told him all that yea
In the modding Discord, so I think he should figure it out ;)
Also speedType is exposed
That's not the problem
Starlit doesn't expose new stuff
It just makes it way easier to access than the normal way
Well at least I told him teh same thing and not a different answer.
Yea
What is the normal way for accessing the public java fields?
I don't know the method perfectly, but something with iterating through all the fields and finding the right one or some shit like that I believe, I'm not too sure
What I know is that it requires quite a few lines
Reflection?
Or something similar at least
provided by the Java <-> Lua interface.

I'm not knowledgable enough on the subject
I wanted to explain the process in the wiki but didn't go deep enough in it
Fair, it's a pretty niche thing
Yea
AFAIK (From C#) only modders really care about reflection because developers would just make a public interface to get to things easily and properly, but modders show up wanting to do stuff to bits of code they aren't supposed to access. So documentation is a mix of "this exact syntax works for me, don't ask what to do if it doesn't" forum posts and "here's a highly technical discussion on the internal workings of code" forum posts.
The method used to access fields is provided by PZ I believe
If I update a mod to be B42 compatable, would it still be compatable with B41?
yes
W, and reading the thread in pinned messages, do I NEED to use the common folder at all? or could i just keep it empty
Mandatory
you don't have to, but it must exist
okay W again, thank you 😄
You don't need to use it, but it still needs to be there.
It can stay empty
yee, now i just need to update other stuff since now it crashes when i interact with it 😭
duuuude thats so dope, please let me know if you make it work!
Oh yeah, I actually finished it earlier today. Just haven't released it yet.
It just required adding an if statement with starlit library as a dependency
awesomee ill be waiting to download it
also some custom clumsier animations would look cool, i use blender so if you want i can give it a shot! and if you dont i will still give it a shot so i can have it on my own game
🙂
btw can anyone point me to some cool modding tutorials? ive found a couple of basic ones but i find it really hard to find the specific things i want to make, ive been downloading other mods and checking their scripts to get things done that way but i feel im not really learning, just guessing and copying. also tried asking chatgpt for help but it sucks, if anyone has any tips to make gpt work or any other ai that could help me i would really appreciate it!
Wiki is getting updated with better information on how to do stuff
thank you!
https://steamcommunity.com/sharedfiles/filedetails/?id=3423871533
Edits the mod "Stay Away From The Windows" by k and Clem
https://steamcommunity.com/sharedfiles/filedetails/?id=2922443751
Uses Starlit library to make it so the code only activates on sprinter zombies.
That's it, that's all it does. It adds a single "if" statement to the original code.
Enjoy your sprinter terror, and significantly less shattered windows.
Pairs nicely with Vaulting Zombies by Ham
https://steamcommunity.com/sharedfiles/filedetails/?id=2872586942
im new to modding making my first map but when i go and try to test it i cant spawn or atleast i cant select the location? i did the "write spawn points..." in WorldEd and was following dirkie dirks tutorial (part 4) fine up until now i just cant spawn ;-; any ideas on where to begin on fixing this?
ive been downloading other mods and checking their scripts to get things done that way but i feel im not really learning, just guessing and copying.
Don't tell anyone, but we're all doing the same.
I wouldn't trust ChatGPT, or at best consider it to be as reliable as a random guy on the internet who might be pretending to know lua and also didn't check his post for sytax errors.
I've seen some people in here complain that their ChatGPT lua scripts to not be working and then get upset when we explain it's because it's ChatGPT not knowing what it's doing.
Please don't use Ai to write code.
It can't actually think, it just follows patterns.
Those youtube videos where people use Ai to write code gloss over all the fixing to the code they have to do
I bet I'll regret installing this 
I mean it only matters if you play with sprinters lol.
Though I could make alternative versions that only activate for fast shamblers & shamblers if someone asks
I use 2% sprinters.
Well then they're gonna jump through your windows. (you should use vaulting zombies to make the sprinters actually jump through)
It's possible, but it doesn't make sense.
I added a comment to Vaulting Zombies lettingthem know about the sprinters-only code, since from the comments the author was trying to figure out how to do that.
The code itself actually just goes
"Is this zombie touching a window? Yes? Is the window open? No? Is the window barricaded? No? Explode the window."
All I did was use starlit library to add an if statement to check if the speedtype == 1
Now it does all that but first it goes
"Is this zombie speedType 1?(Sprinter) No? Ok nvm"
I figured it would be that simple, any code that works on a single IsoZombie at a time should be easy to add the "is this a sprinter?" conditional.
I did minimal testing and it seems to work on B41 and B42 so this is technically my first build 41 mod lmao
My first build 41 mod and it's just adding an if statement to someone else's code 
To be fair though, trench foot would probably work on B41 I just haven't tested it at all so I haven't back ported it
My Map isn't showing up when I boot up the game and look for it, I've checked and double checked the Mods.info file, as well as the ones inside of the Media folders, anything I could be missing that I could try?
There is also a slight possibility that I could be a lil special
Is the mod showing up?
no
build 41 or build 42?
B41
where do you have the mod folder?
that's the problem then, you need it to go in
C:\Users\User\Zomboid\Workshop\ModParentFolder\Contents\mods\ModName
Modparentfolder is so suppsed to be the main file like Mod template folder?
Yeah can be named anything
ight
if it's in the mod folder would it mess with it?
don't worry about the workshop.txt that's auto generated when uploading
in main mod template?
I don't think it'll load the mod in the mods folder so no
oh you could put it in the mod template's mod folder yeah.
Would be better to make your own though so you don't accidentally upload the mod template itself
I alr have
Happens a lot lol
I didn't put into the mods template I meant like the workshop.txt, do I need to personally add it to the folder?
Still isn't showing up
can you show where you put the mod
yeah
Windows Key + Shift + S will let you select only part of your screen for a screenshot if you don't wanna show everything
TheCabin is the mod
you mean this shit is built into windows and i've been using lightshot for like six years? 😭
yup
Main Mod Folder\Contents\mods\mod folders
question: after using setPerkLevelDebug() is there a way to correct the xp in the perk so it's no longer negative for the level?
Well first off, I said Zomboid not ProjectZomboid.
I also said it needs to go Workshop\Parent\Contents\mods\ModName
Should there not be a media file in the contents folder?
No
You did Workshop\Modname
ProjectZomboid folder looks like this
yeah...
character:getXP():setXPToLevel(perk, level)
Zomboid folder looks like this
Thank you so much. I was using it wrong, lol
.
All good man
Albion was tryna explain to me how to use starlit library to do something and I kept asking questions and not understanding so I gave up on asking and just started messing with stuff 😅
I felt so bad for asking lol
you don't have to feel bad for asking - i definitely could've given a better explanation than essentially 'just do it' but i was busy at the time
So the file thing should look like something like this?\
Your instance would be like
Zomboid\Workshop\TheCabin\Contents\mods\TheCabin
The mod itself goes into the mods folder
OOOOOOOH
whatever your mod contains goes into that
Zomboid\Workshop\TheCabin\Contents\mods\TheCabin\whatever mod content you have
so this
ight imma test
Your mod is for build 41 so it wouldn't look like this
um
Name of the parent folder doesn't matter, this instance I didn't even bother renaming it
Ignore the "42" and "common" folder
This should be the inside of your mod
Can you show the inside of TheCabin ?
yeah 1 sec im making the folders real quick
This so far
How big does the icon png need to be?
we can worry about that later, the mod will load without it
ight
This
see if the mod shows up now (restart the game or reload lua)
if it doesn't show up, change contents to Contents and Mods to mods
idk if capitalization is important, but it's worth a shot
can you put the mod into a .zip or .rar file and send it here so I can look at it?
hol on i think I found the issue
oh?
yeah
nothin
here
lmk if you've got anythin
I see the problem lol
is it bc there are 2 object folders?
oh
And your map data is kinda naked
here
one sec
ight
Your Zomboid workshop folder has a "ModTemplate" folder that is an example of a map mod btw
oh
I have no idea, they're your files 😭
You would need to ask someone who knows how to make maps, I just know how to make your mod show up
no problem 👍
I mean if you opened the zip I sent and dragged the folder into Workshop to replace the one you have there, it should work fine
well at least show up
got it to show up
I needed to re downaload it
Well shit
this happened when I tried to spawn in
anyone here a map maker or smthn like that who cna help out?
The console says that it didn't load bc it failed to find any .lotheader files
well it's a good thing I see 0_0.lotheader in the files I said to move xd
true
it worked
I can play it now!
ty for your help!
Well it was my childhood lmao, I'm only 21. Turning 22 this month
@round thorn Hey I was wondering what you thought about the update from the other day to Salty Smithing - Forging Iron
Any thoughts?
Suggestions for recipes or functions that could be added to the mod?
Where do local mods go, and is it different in B42? It's been awhile since I did anything, I just made a retexture and want to test it
Users\Zomboid\Workshop\ (Mod Parent Folder)\Contents\mods\ (Mod Folder)
thanks!
I'm getting the "Your mod is missing a mod.info file" error, I can't seem to figure out what im missing here when trying to upload through PZ to the workshop. I've referenced the wiki and ETW's github but it looks like everything is there? 😩
id shouldnt have the \
Same issue without the / tried having both of them the same too
maybe try without versionMin?
im not sure but i feel like i've seen someone mention that versionMin breaks something in b42?
Saw someone say to try that but i've tried it without as well
the \ is used for dependencies & incompatibilities because it's telling the game to check a folder deeper I'm pretty sure
I don't think you want that in your id
Stripped out minVersion, no \ in id, still throws missing mod.info its so weird
Has to be something dumb
oh wait
it must be the vscode folder
its probably checking the vscode folder inside mods and seeing it has no mod.info
if you set your project folder in vscode to the main workshop folder for the mod it works fine
Will do, I think thats how I had it setup last time
an invalidly formated one will brick the game
Does anyone have any idea why adding ExtraDamage = ##,
to the SENSOR version of bombs causes a crash to title screen?
It does not happen with time bombs, or impact bombs
just the sensor bombs
This shit has me tweaking hard because I'm trying to add damage to pipe bombs while removing the fire from them
Even the remote controlled version doesn't crash
it's JUST the sensor version
I don't understand why
What doesn't? Is there a way to white-list which fluid a fluid container can have in it only?
Thanks for the help from everyone the last week or so, finally got the mod updated and online for b42 https://steamcommunity.com/sharedfiles/filedetails/?id=3423984426
🙂
Alright, tested my vehicle back in B41, the seats work great, I have no idea what causes issues in B42, I'm using Tsars lib on it (B42 Version) and also tried it with it removed, nothing worked.
Anyone had this happen before?
I'm leaving this here if anyone wants to check it. I'm out of ideas.
huh... it's kinda funyy rn
have anyone been wondering why u can only pet 1 animal and not able to queue the actions instead?
@granite ginkgo I downloaded your mod from workshop, the recipe is not up to b42 standard(deactivated it) and i fixed the vehicle areas and position, you can build up from that. And you should decide which folder u use you have common and 42 with the same content, common should have your textures ,models and ui (changed stuffs in the 42 folder since its loaded last.)
Hi, any clue how to wait for the take pill action to be finished before doing something else?
ISInventoryPaneContextMenu.takePill(item, playerNum)
For example if I do this after:
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, inventory, container))
it interrupts the take pill action
I guess I could hook ISTakePillAction:complete() to achieve this but I wonder if there's a better way
yeah i figured that out pretty quickly haha i still use it so it can explain me how some things work when im checking other peoples scripts
I can't thank you enough, you just made the day of 9,4k subscribers, tried different things for the past 4 days, I'll add you as a contributor in the description as a thank you!
your welcome 🙂
and you should do something about your tires they cant hold air 😄
you are missing the MaxCapacity = yourvalue, in the item def
Woah, didn't notice that, ill have a look!
and if you use non vanilla parts for your vehicle, you should make recipes to craft them or add them to the loottable, iam myselt am not rly a fan of that, i think using vanilla parts is just fine.
I thought the custom parts are automatically in the loottable
how would the game know if you dont define it.
well, if I have it in the items.txt I thought the game will automatically get them from there
nah, just because its in the games itemlist doesnt mean it can drop
same is with the car if you dont define the spawns you wont see it
indeed
when i update my mod to b42, can ppl with 41 still play/use it?
you will create a folder called 42 in your b41 mod, and the game will load the data it has for that version, so yes.
oh thats why it says Copy and not move the data
yep
thanks
👍
I think my solution is gonna be to essentially neuter the sensor bombs that I add ExtraDamage to (remove them from the bomb recipes, and as a failsafe make them identical to normal bombs to prevent mod confliction causing crashes)
im trying to spawn into my test world (first mod) and im trying to see if it works so far, i can see and enable it in my mod list but when i get to choosing spawn points the one i made is not there. is there any area i can begin to look? i cant find any vids or posts that fix this ive tried everything that i can think of im pretty sure the files are fine, the closest thing i have is the "write save points..." step i mightve done wrong but if so idk how to save them then?
Why are these separate recipes? is the 1 xp difference that important?
craftRecipe DismantleMiscElectronics
{
timedAction = DismantleElectrical,
Time = 60,
OnCreate = Recipe.OnCreate.DismantleMiscElectronics,
OnTest = Recipe.OnTest.DismantleElectronics,
Tags = InHandCraft;Electrical,
category = Electrical,
xpAward = Electricity:2,
inputs
{
item 1 tags[Screwdriver] mode:keep flags[MayDegradeLight;NoBrokenItems],
item 1 [Base.CDplayer;Base.HomeAlarm;Base.Remote;Base.Speaker] flags[ItemCount] mappers[itemType] mode:destroy,
}
outputs
{
item 1 Base.ElectronicsScrap,
item 1 mapper:itemType,
}
itemMapper itemType
{
Base.Amplifier = Base.Speaker,
Base.ElectronicsScrap = Base.CDplayer,
Base.MotionSensor = Base.HomeAlarm,
Base.Receiver = Base.Remote,
}
}
craftRecipe DismantlePowerBar
{
timedAction = DismantleElectrical,
Time = 100,
Tags = InHandCraft;Electrical,
category = Electrical,
xpAward = Electricity:1,
inputs
{
item 1 tags[Screwdriver;SharpKnife] mode:keep flags[MayDegradeLight;IsNotDull],
item 1 [Base.PowerBar] mode:destroy,
}
outputs
{
item 1 Base.ElectricWire,
}
}```
this is a recipe that dismantles a power bar and this dismantles other electronics like CDplayer, house alarm, etc. XP isn't important. it's just how much XP the player gets for performing this recipe
I know, but why are they different recipes
because they yield different items
the CDplayer and others yield a few itmes
and the power bar only yields electric wire
yeah so does each input, that's what mapper recipes are for
so the similar ones are group together
Base.Amplifier = Base.Speaker,
Base.ElectronicsScrap = Base.CDplayer,
Base.MotionSensor = Base.HomeAlarm,
Base.Receiver = Base.Remote,
the mapper essentially allows the recipe to occur using multiple options of an item
it could also be used to yield different results depending on the item inputted
could have added on
Base.ElectricWire = Base.PowerBar
true, the power bar recipe allows the use of a sharp knife tho
Yeah and why don't normal electronics?
@ The Indie Stone WHY ELECTRICAL GO BRR
notice the OnCreate on DismantleMiscElectronics? Basically it modify how many ElectronicScrap That Will Be Outputted when It is done crafting using Elect. Skill Level (iirc).
What TIS envision rn is probably to seperate PowerBar as they don't want it to output any electronic scrap, only wire
Wait Nvm, Its not the elecrtronic Scrap, it's battery chances
also idk man, ask TIS why they won't give electronic scrap 🫠
Oh they have a chance to give batteries?
yh but only for remote item
it has to be seperate, cuz the DismantleMiscElctronics give scrap electronic
and TIS don't want power bar to drop that

again... dk why 🫠

also i agree, they should drop scrap electronic, feel weird that they dont 🗿
that's okay, even though the hand phone is used in the electrical dismantle animation, I don't think you can dismantle them
🫠
Unless it was just bugged in my game and works fine normally
wait no I don't think you can in build 42 cuz the dismantle electrical doesn't use tag crafting
wdym?
to offset on z axis iis offset = 0,0,number, ?
nvm separate recipe
craftRecipe DismantleElectronics
{
timedAction = DismantleElectrical,
Time = 60,
OnCreate = Recipe.OnCreate.DismantleFlashlight,
OnTest = Recipe.OnTest.DismantleElectronics,
Tags = InHandCraft;Electrical,
category = Electrical,
xpAward = Electricity:2,
inputs
{
item 1 tags[Screwdriver] mode:keep flags[MayDegradeLight;NoBrokenItems],
item 1 tags[Camera;Digital;MiscElectronic;Flashlight] mode:destroy flags[IsNotWorn;ItemCount],
}
outputs
{
item 1 Base.ElectronicsScrap,
}
}
```
this one makes even less sense to be separate
recipe choices got me tweakin
I managed to add a sub menu with a matching icon, and removed the default context crafting option.
I keep coming up with no valid items for my sub options, vs any of the 1 out 4 inputs for the valid recipe.
if anyone can point to any references to better understand sub options, ty 
Does anyone have an example of a working usage of player:setClothingItem_Head (or any other body part for that matter lol)?
To equip a piece of clothing or spawn one into existence and then equip it?
Hey guys. I'm trying to pack a couple of mods into one mod for my server. I tried merging everything, keeping the directories, but i believe some files might be conflicting. The mods by themselves work well with some minor errors, but when packed, it's a total mess. Does anyone have any experience with modpacking and could help me out?
I have a min viable mod after ~40 hours 🥲
does anyone know the Lua class responsible for handling in-game UI resizing (like the player inventory UI and how it's resizable by click-dragging the bot-right corner)?
why are you modpacking
Why not?
Because it's generally frowned upon and there's not really much reason to do it anymore
Yeah. Bit im packing my personal mods.
confused on why you would need to pack them then
I jsut need help bro
Modders here tend to avoid helping with modpacking. Is there a specific reason you need to do it?
Basically, I want to forcibly replace one (or no) equipped hat/helmet with this function I'm creating (if that makes sense)
Like - this command is run and boom - I have a party hat on now instead of a beret or instead of no item
player:setWornItem(bodylocation, item)
Thank you! Trying this now! 😄
what are the potential values for bodylocation?
The standards from the setClothing_X?
if you look in media/lua/shared/npcs/bodylocations.lua you can see them
Thanks so much! You rock!
Can I check for mods to add additional options in the sandbox based on loaded mods? (hide or display them)
Not really
Oh damn, Bury is on hiatus 😦
I’ve only recently learned of their coding prowess. Noorby explained how amazing Dome was
I think I have a problem, do you know why my mod doesn't appear in the workshop? It is in public and everything seems fine but when using the search engine it simply does not appear.
No idea

I uploaded it from build 41, because it is for that version, but could that be the problem?
They sometimes do. maybe maintenance time?
I hope that's what it is jaja
oh my god im free it's finally done
this should not have taken like a month off my life
does anyone have tips for doing translations quickly? it's something i'm considering skipping
people will hate me for this but AI
you might need to do double checks but from my experience if u explain it well, AI can easily do translations
there's a tool to google translate a whole mod into every supported language
otherwise just skip it, most people who get your mod will speak english anyway since your mod page will be in english and machine translations are never very good
thanks, I'll look into these recs
Love it. I'm pro AI... with human intelligence post-processing
yeah, they are awesome if u work with them. can save u alot of time
i had to work on radio translations and that file had me translate every GUID of every line in the broadcast
the Ai did it in a few mins. It would've taken me like at-least several days.
but they can't write code for shit
a blind and deaf guy could write better than them sometimes haha
$20/mo and ChatGPT o3-mini-high
it's pretty decent but needs a lot of guidance
ChatGPT is dead to me. I mostly use Qwen.
Which is better and free like Deepseek. Also not constantly loading like Deepseek. And comes with an image generator.
i mean i don't like having 50 accounts just to use GPT for a long task lol
cuz u get blocked from doing any requests after like 5-10 messages.
Here's a great resource for verified localization of various common words if you have any simple text you're translating too
how difficult is it to modify the collision size of an object?
id like to make the car lifts not have an entire tile of collision and just roughly the shape of the object itself as it blocks exiting the car and parking easily
Anybody know off the top of their head where animals are defined in the java/lua?
As in specific animals, rather than general/inherited behavior
where is the tiles packs found?
does anyone know how i can make a world object give out light?
closest thing i found was the lanterns mod
IsoAnimal
And they inherit from IsoPlayer, for some reasons
Cheers, thanks
idk if this is the right place to ask but i'll ask here, I'm also new to pz modding
Would this mean that player was nil(null) for whatever reason?
yes
and the issue would be in my vehicles onKeyPress function?
I swear i check if player exists... maybe i dont idk
do if player == nil or player:getVehicle() then return end maybe as a fail safe
im pretty sure i do do that one secc
looking at the code in your screenshot it doesnt seem you do
on the right side that isnt mine
ohh
Thats CAnimals_Interact, which idk why its that one..
well thjen ikd but yes the player is nil in your case, it should be pretty ok to fix but if you still need help just ask
both vehicle and animal radial menu uses V for opening radial menu. that's why I guess
if it is not radial, but should be something similar
what unpackers do yous use
Wdym unpacker ?
I don't remember if an unpacker is linked on the wiki
But you can open and unpack from the modding tools I believe
Hmm I don't remember, but just the general modding tool
You got a section at the top, in tools I believe, for pack files
It's fairly explicit so you should be able to find it
You can open pack files, and I believe you can unpack
okay thank you im just starting lol
OH i found it i didnt even think to check steams tools
Np thought you knew about those tools mb 😶🌫️
nah i only just as of 10mins ago decided to look into modding pz lol
if u know of any resources to help learning much appreciated 🙂
Welcome to PZ modding then
I suggest checking the wiki
can someone help me with this, so i have this outfit for a zombie, when i add lets say a dufflebag to it, the zombie will spawn with that bag on it's back. It works fine, always spawning without any issue, but when i want to replace the dufflebag with a briefcase it just won't spawn at all, i tried using GUID for the briefcase alone, for the left hand one, for the right hand one, for base and one hand, and all 3 of them, but neither of those combinations work, is it somehow possible to have a zombie spawn with that thing at all?
player:isSeatedInVehicle()
this would work as well i think
You equip briefcase into primary/secondary slot. It still for some reasons acts as clothing but in order to work/it appearing it has to be equipped in those slots and I'm not sure if zombies can have anything into their slots? You could maybe copy dufflebag item but make it use briefcase clothing XML?
and how do i equip something on primary/secondary slots? i tried to equip it like a weapon but that didn't work, and using the briefcase XMLs doesn't work either
i can attach a weapon to them, so i thought it would be possible to attach a bag the same way, but apparently not, or i'm just doing it wrong
the difference with the dufflebag is it's worn on the back, and the briefcase can't be worn on back
Thing is, containers like garbagebags/briefcase, because of TIS knows why are counted as clothing items. You don't equip weapons on zombie, you make it appear on spots that game allows you to place on player model for displaying them as if they were "impaled". I dont think you can "impale" zombie with briefcase or any other clothing item.
It wouldn't be hard to make clothing items like briefcase that is actually displayed like holding in hand and still be equiped on clothing item slot, so it doesn't need to be in right/left hand
You can equip something in the hands of a zombie
Hmmm
setPrimary... something
how would i do that, in a lua?
The main problem will be: is the zombie animation able to handle that item in hands
But UwU want to do it with outfit definition i belive?
Like I said, setPrimary somethinh
i dont really care how, i just want it to work haha 😄
Look it up in the java doc
Idk if it'll work for briefcases since it seems to be weird
But just check it out
i'm not sure what you mean tho, i'm very very very new to all that
How did you add dufflebag to zombie?
in an XML just like i'd equip a shirt or w/e
<m_items>
<itemGUID>cd6a888a-939b-45ef-a100-2b726ebb66f3</itemGUID> <!-- Briefcase -->
</m_items>
You need to do it through the lua
Did you add that item to fileguid table, even if its vanila item?
just dufflebag here not briefcase
yea
Same with briefcase?
yep
Do you care if that briefcase would be equipable on back?
Also from what i can see briefcase has 3 clothing xml files, Base one (which seems to be unused?) right hand and left hand
Did you include all of them in your fileguid and outfit definition?
i tried just the regular XML, left one, right one, regular and one side or another, and all 3, but none of those worked
i'm sure this is useful to someone who knows programming, but unfortunatelly i can only edit already done stuff, i don't get how any of it works even after reading all that xD
I'd go for workaround (im in no way in my current state to think of better idea) and make new "custom" briefcase that can be equiped on back.
item CustomBriefcase
{
DisplayName = Briefcase,
DisplayCategory = Container,
Type = Container,
Weight = 1.5,
CanBeEquipped = Back,
IconsForTexture = Briefcase;Briefcase_Metal,
ClothingItem = Bag_Briefcase_RHand,
Capacity = 8,
CloseSound = CloseBriefcase,
MetalValue = 15,
OpenSound = OpenBriefcase,
PutInSound = StoreItemBriefcase,
ReplaceInPrimaryHand = Bag_Briefcase_RHand holdingbagright,
ReplaceInSecondHand = Bag_Briefcase_LHand holdingbagleft,
RunSpeedModifier = 0.97,
WeightReduction = 50,
WorldStaticModel = Briefcase_Ground,
MaxItemSize = 2.0,
}
See if it works.
i dont care for anything other than zombie walking around with a briefcase in it's hand, and after killing it you being able to loot that briefcase, it can be done any way possible, like making a fake briefcase weapon for the zombie to wear, and then removing that on zombie's death and replacing it with an actual clothing item, i just don't know how and if that's possible
My idea is to make it wearable on back (or any other location, if needed) and when equiped on back it will use Clothing XML as if it were hold in Right hand.
yea sure that works too, but will it stick to the hand bone and move with it?
In theory it should
oh but wait a second, will that use the acutal vanilla briefcase?
Yeah
All vanila clothing xmls are used. You just make new container that uses them, with addition it being able to be worn on "back" slot of character/zombie and while worn on back, it will use RightHand version of briefcase because of "ClothingItem = Bag_Briefcase_RHand,"
it won't be possible to wear anything on back while wearing that tho right
I think you can change it to any other location or make your own. Though its for testing first
then again not like it even matters really, who's walking around with a briefcase right
You can then change it in script and still should work.
Wait...
I forgor... We dont give zombie actuall item do we?
yea i kinda wanna do the thing Sir Doggy Jvla said, tho i have no idea how haha
wdym
Sorry. I've still not fully recovered after my sickness. You tried adding that briefcase through "clothing" xml in media>clothing, right?
yea
I think it would quite easy
Actually maybe not
there's all those folders and parameters idk where to even place anything, like in an attachedweapondefinitions lua, or making a new one, or w/e
Id suggest make copy of all 3 of briefcase xmls, rename them to be diffrent from original and change all their guids, insert those guids into fileguid table. Then make that custom briefcase use your edited files you inserted in table.
Its easier for me to do it than to explain it
yea i get you, tho in that case wouldn't i just need 1 XML, for wearing it on the back but attaching like it's in the hand
You can, and just dont put "ReplaceInPrimaryHand" and ReplaceInSecondHand lines in your briefcase
I mean you can....
Okay... i can't really think straight for some reason.
is it possible to remove it on zombie's death and replace with a regular briefcase in it's inventory?
Yes
well it kinda works, but the briefcase isn't really held in the hand, so it clips through the legs heh
weird thing is when zombie's walking it actually looks good, only when it's standing it clips, and it clips both when standing and walking on a player 😄
Bcs they didn't properly make the animations
That's my guess
could you give me some example where this is used? like some in-game thing or a mod if you know any
Hmmm I don't have any examples, but it's not insanely hard to do don't worry
It will involve this
the model attachment needs adjusting i think
idk what its called
biprop adjustment or smthin like that
attachment world
{
offset = 0.0000 -0.0250 0.0000,
rotate = 0.0000 0.0000 0.0000,
}
attachment Bip01_Prop1
{
offset = -0.0 -0.00 0.00,
rotate = 90.00 -90.00 0.00,
}
attachment Bip01_Prop2
{
offset = -0.0 -0.00 0.00,
rotate = 90.00 -90.00 0.00,
}
this
yea but it's actually in the back slot, so the game isn't using the hold in hand animation for it hence the weird rotation
aha
i think the model itself needs to be adjusted then
i dont think you can adjust the back position with scripts
yea it would be best to just make a prop briefcase as a weapon or w/e, and then on zombie's death replace it with the real one, tho idk how
you can just use a recipe
that converts it from a container form to a weapon form
beware tho it'll delete all the contents inside the briefcase
or what do you want to do exactly?
you can just have it as a container that can be held in hand too
i want a zombie wearing my outift to carry around a briefcase in hand, that you can loot when you kill it
apparently that's not as easy as it might seem heh
its super ez
nah haha
lemme send u mine, its literally 3 lines
works for me just fine
that adds a new clothing category
like many mods do
this allowed me to add in armbands
but how are you going to attach a briefcase to it
BodyLocation = Righthand in item scripts
and then set a zombie to spawn with this clothing
and it'll spawn
you can then have it as a locked form that the zombies spawn with and an unlocked form which is only accessible thro recipes and also gives loot and a container form of the breifcase instead of a clothing one
so the player can reuse the briefcase
im not sure how to make the model appear in the hand tho
i always used models that had a left and right hand form
mostly from vanilla
and i want to use the vanilla briefcase here
you can just use WorldStaticModel = Xbriefcase or whatever its called you'll need to refer to the vanilla zomboid files
and then the clothingitem you define the right and left hand models
<?xml version="1.0" encoding="utf-8"?>
<clothingItem>
<m_MaleModel>media\models_X\Skinned\BackPacks\Briefcase_LHand.X</m_MaleModel>
<m_FemaleModel>media\models_X\Skinned\BackPacks\Briefcase_LHand.X</m_FemaleModel>
<m_GUID>0580be0d-ef5b-486a-a423-7ebe13d7976e</m_GUID>
<m_Static>false</m_Static>
<m_AllowRandomHue>false</m_AllowRandomHue>
<m_AllowRandomTint>false</m_AllowRandomTint>
<m_AttachBone></m_AttachBone>
<textureChoices>clothes\bag\briefcase</textureChoices>
<textureChoices>clothes\bag\briefcase_metal</textureChoices>
</clothingItem>
here's how vanilla does it
the models are already there so u can just re-use all of that stuff
if you wanna use the vanilla model
yae but look, i tried adding that briefcase to the outfit, but the game won't spawn a bag that's not attached to the back
like right/left version just doesn't work
i mean, i want a vanilla briefcase, without making any new stuff
attached to a zombie's hand
if i need to make a new item as a prop then so be it, but in the end, after killing the zombie, i want to loot a regular vanilla game briefcase from it
as i said, do not attach it to the hand if u want it to be used by zombies
you'll need to define a new body location
it's all pretty pointless tbh, but i just wanted to make that work for whatever reason 😆
cuz zombies dont hold things in hand
i once spent 12 hours straight debugging my zomboid mod lol
and it wasnt a lua file lol
😄
its up to u if u wanna continue
but how are you going to attach a clothing item to the body, i tried attaching it like a weapon but that doesn't work
Bodylocation = RightHand
and you'll define the righthand clothing location
local group = BodyLocations.getGroup("Human")
group:getOrCreateLocation("MARightHand")
like this
and then it'll be like the zombie wore it instead of using it like a weapon
zombies dont have primaries or secondaries, they do wear clothes tho
did you do the ClothingItem too?
and the whole process?
I can make you clothing item/model that will be working like briefcase in hand, but it will be equipable as any other cloth piece
but where do i put that, am i supposed to make a new item script for this briefcase? will that not make a new item?
lemme just send u an example
the thing is if i make a new clothingItem i'll end up with a new briefcase, not the vanilla one, no?
item SecretBriefcaseRight
{
DisplayCategory = Accessory,
Type = Clothing,
DisplayName = Locked Briefcase,
ClothingItem = SecretBriefcaseRight,
BodyLocation = MARightHand,
ClothingItemExtra = SecretBriefcaseLeft,
ClothingItemExtraOption = Left,
Weight = 0.01,
Icon = SecretBriefcase,
CanHaveHoles = false,
Tooltip = Tooltip_Briefcase,
WorldStaticModel = Briefcase_Ground,
}
Now I did make it a bag/container as it is a locked form, but if u want to make it a container sure, but I have no idea how to make loot spawn in a container in the world.
now you can make a recipe to unlock it. you'll also make a left hand form.
you will also make a clothingitem for each one
you will make a recipe that allows the player to unlock it
ah you mean just craft a regular briefcase form this one
well that's one way to do it yeah
this would give the player the loot u want and a normal briefcase
thats how i'd do it haha
well maybe you're right 😄
dont forget translations, models, textures, icons and such
that way i could specify what's inside of the briefcase?
its a whole process
yeah
wanna see an example?
sure
I have something called a FAR raiton
it gives medical supplies
when opened
however, lemme tell u smthin before
you mean u just get that stuff added to your bag, or is it inside of that crafted thing
if u want different loot u might need to make many variants of the briefcase
so each recipe can be defined and each briefcase would be "random" instead of pre-determined single loot
wait
craftRecipe OpenFARRation
{
Time = 25,
timedAction = UnPackSmallBag,
Tags = InHandCraft;CanBeDoneInDark,
category = Medical,
xpAward = Doctor:1,
inputs
{
item 1 [SupportCorps.RationFAR;],
}
outputs
{
item 2 Base.AlcoholBandage,
item 4 Base.Bandaid,
item 1 Base.Antibiotics,
item 1 Base.Pills,
item 2 Base.SutureNeedle,
item 1 Base.Tweezers,
item 1 Base.Disinfectant,
item 2 Base.AlcoholWipes,
item 1 Base.AlcoholedCottonBalls,
item 1 Base.Splint,
item 1 Base.ScissorsBluntMedical,
item 1 SupportCorps.RationFARPackage,
}
}
this gives a ration package that can be used as a container by the player to store all the loot they just got
now to make it easier
and does all of that loot end up in your bag, or in that opened item
all the loot goes into player inventory
i see, wouldn't it be possible to put it in that bag?
which he can then store into a new container that he just got "SupportCorps.RationFARPackage,"
would require complex lua coding
not worth it
just wondering, not like that matters heh
you could probably do it, but its def not worth the headache
you might as well develop a new modding tool or smthin
and do you see what you'll get when crafting that recipe?
and if i don't then you won't see untill you open it?
yeah
ok that's good
you'll just get the recipe name
which you can set as "Crack Suitcase' or whatever u want
its defined in translations
yeah that'll be good enough, thanks a lot !
Recipe_OpenFARRation = "Open Ration",
i think you can add tooltips too but i havent tried one yet
so like a tooltip to the recipe itself
and u can add one to the item
idk who thought it's a good idea to make clothes in XMLs, weapons in scripts, and all the functions in LUAs, then again idk how games work so maybe that's necessary 😂
honestly, if scripts and clothes were in LUA nobody would mod LOL
i don't want any tooltips tho, i just want to get money from the briefcase 😄
i'm already ripping half my hair out writing a 20 line LUA script
