#mod_development

1 messages · Page 249 of 1

thick karma
#

Did you possibly lock it using admin settings or something? Looks like an admin slider

#

OnEat_Cigarette

#

People were just discussing it

sonic oyster
#

Negative! In previous tests you could see the slider moving, similar to hunger, fatigue, and thirst

thick karma
#

See Coding there

sonic oyster
#

I see

#

Dang, I guess I'll need to rewrite stuff... Or maybe wait until B42 drops and do it then LOL!

chrome zephyr
#

i meant where do i get started? is there an option inside pz or do i need to do something to the folders?

tidal pike
#

I need a help , I need an item called "Maquina" can only be removed from the floor if the person is an admin , but I'm not getting someone can help me ?

worthy pawn
#

ca[a232196827577974784

thick karma
worthy pawn
#

Woops. Was seraching for some information. Must've had it in the wrong bar.

thick karma
worthy pawn
thick karma
worthy pawn
#

⏚⏃☊☍⌿⏃☊☍⌇ ⏃⍀⟒ ⋔⏃⎅⟒. ⟊⎍⌇⏁ ⍀⟒⎅⌇☍⟟⋏⌇ ⍜⎎ ⎐⏃⋏⟟⌰⌰⏃ ⎎⍜⍀ ⏃ ⌇⏁⍜☊☍/⌰⍜⏁⟒ ⎎⍀⟟⟒⋏⎅⌰⊬ ⎎⟒⟒⌰.

⌰⍜⍀⎅ ⍜⊑⏁⎍⋉⏃ ☌⏃⎐⟒ ⋔⟒ ⏁⊑⟒ ⍜☍

gleaming axle
#

first thanks everyone for the help earlier this week. First time doing any modding for Zomboid and got some quite helpful tips here. Just wanted to share my attempt to add custom commands via RCON to Zomboid without touching the java files. This was more like a fun challenge for myself, obviously not ideal to handle via client events but it works and don't need to touch on the java stuff.

Appreciate if you could share any feedback on how I could improve the code https://github.com/caiocezart/zomboid-rcon-custom-commands

GitHub

Contribute to caiocezart/zomboid-rcon-custom-commands development by creating an account on GitHub.

fleet bridge
#

Guess not if it's through servermsg? Does this disable server messages entirely?

gleaming axle
#

the servermsg command needs admin priviledge to use

#

no, it only look for the custom ones, otherwise let it go the vanilla way

fleet bridge
#

Neat.

#

Smart too

#

So if you have 20 players online all 20 would trigger the rcon command then?

gleaming axle
#

all 20 players will send the request to the "server side" of the mod and the mod will handle that to only run the command once. That's basically why you need to put an ID on the command itself and the mod server register that on a variable/table. If there are more interest on this project I can put more time to improve the code

red tiger
#

Mine works both singleplayer and multiplayer rcon.

gleaming axle
#

@red tiger yeah I saw yours man, nice work there just wanted to try to get something working without touching the java

red tiger
#

And unless you absolutely cannot touch the Java side, there's no issue doing so.

gleaming axle
#

not really, I just separated the custom commands on multiple files to be easier for people to create their owns. It's actually fairly simple workflow, client receives the servermsg, sends the trigger to server and the mod suppress the message itself so the client wont even see it

red tiger
#

Sounds neat. I took some time to look at writing a solid command callback API.

#

I also need to get back to my lua encryption library for PZ's network Lua stuff.

gleaming axle
#

thank you, it means a lot coming from you

wet sandal
#

Anyone know if there's a way to rotate the player without any animation?

#

The animation moves the character slightly, jittering the camera position every so slightly. Not a huge problem, but makes my freecam feel bad when changing the view direction.

indigo ferry
#

What is the best java decompiler that can be used for project zomboid?

drifting ore
#

I mean some other decompilers might be able to reconstruct the source more intelligently, so it looks more like something a human would write, rather than just straight up whatever Java code compiles to identical jars as the original. But it's not like any of them can retreive comments or original variable names, because those are not in the jar. So I don't think it matters and you can just use the default option.

fleet bridge
gleaming axle
#

I am going to publish to steam workshop later today

gleaming axle
indigo ferry
#

how to make custom model for item?

#

I have converted my mesh to x but I don't know how to properly reference it in item script

bronze yoke
#

you don't need to use an .x, .fbx is fine

indigo ferry
#

Do I just do model_X/myMesh?

bronze yoke
#

you need to create a model script and reference that in your item, look at models_items.txt from vanilla for examples

indigo ferry
#

yea I looked into them

#

Are all meshes only available from model_X folder or what?

bronze yoke
#

yeah, only models_X is searched

indigo ferry
#

Alright ty for info

bronze yoke
#

the models folder is from an older system the game doesn't use anymore

indigo ferry
#

I would also ask about custom callbacks on item use but maybe for later

bronze yoke
#

is it a food item?

indigo ferry
#

Kind of?

bronze yoke
#

food items have a property for the name of a lua function to call when they're eaten

indigo ferry
#

which?

#

OnEat?

bronze yoke
#

yeah!

indigo ferry
#

Is there like OnCooked?

bronze yoke
#

yeah, you got the name right too

indigo ferry
#

Same goes OnBurnt?

#

look too many questions

bronze yoke
#

i don't think so

indigo ferry
#

where can I search custom callbacks?

bronze yoke
indigo ferry
#

I think a really neat function to see all variables that project zomboid lua has is to use getfenv(1) which returns a table with all of them

#

I think it's the way you found all the events

bronze yoke
#

you can also access that table as _G

indigo ferry
#

I prefer getfenv() for readability since it also allows to get function enviroment

bronze yoke
#

i try not to rely on it since later versions of lua removed it

#

it can be a very cool hack i haven't seen any mods take advantage of though

livid badger
#

Hello everyone,

I'm creating a small mod that adds new cooking recipes using a campfire. In my mod, I'm using a radial menu for cooking with the campfire. So far, I've managed to get the radial menu to open when I'm near a campfire and display the functions I need.

Now, I'm wondering if there's a way to call the specific recipe I need using a local function. If you know of any mods with similar mechanics, please share a link.

Thank you!

hallow hearth
sour island
livid badger
sour island
livid badger
#

well, it was like 2 months ago)) I was working on another mod)))

#

the main thing is that I remember you))

sour island
hallow hearth
#

I'm in that discord now, thanks Chuckleberry!

livid badger
sour island
#

You're trying to make available recipes appear on the radial?

#

You could look at the crafting menu to see how it handles that

#

The radial menu would be full/over filled though

scenic lily
#

hi! i'm new to modding (although i know how to program), and i was interested in doing an electrical or electronics overhaul for the game since i feel like it's a non explored portion of the game. I am an electronics technician with a couple years of experience, so after a couple years with PZ feel like there's really a lot of things that could be added making the long play last a lot more.
I wanted to ask for a couple things: fistly if there's a known mod that takes part in the same topic that i have overlooked, secondly where would you recommend me to start? going all out with such big project seems unrealistic so i was thinking to start just with some tooling and materails adittion to the game. And last but not least what do you think of the idea? it's intended to work with the time frame electronics

livid badger
mellow frigate
# scenic lily hi! i'm new to modding (although i know how to program), and i was interested in...

Project Zomboid Spiffo's Workshop Welcome to Spiffo's Workshop, the place to find Project Zomboid mods, maps, buildings, and other things to tinker with. For our Modding Policy, click the "Learn More" Button below. Learn More

livid badger
#

And in my mod, I don't plan to transfer all recipes to the radial menu; only new ones will be there, like rat on a stick, chocolate-covered cockroach, cricket with tomato, etc. And with their own 3D models))) XD))

scenic lily
#

and i think it would be a great adition for the long runs where the game tends to get boring

thick karma
thick karma
#

shrug

#

Maybe reach out and join forces?

#

Seem like-minded

scenic lily
#

I have seen that one

#

Used it in my play

#

Maybe I'll talk to him

#

Thanks for the help, I'll keep you updated on the progress drunk

sonic ibex
#

Would it be simple to make a mod that allows you to place a stick or something on a car horn to keep it on? To lure zombies

scenic lily
#

Mm it would be better to hot wire the horn so you can undo it later

sonic ibex
#

I don't know, I figured the stick would be jammed between the seat and the horn to keep it pressed down.

#

Hot wiring could work too.

topaz lake
#

There’s a GTA gun pack on the workshop. I have the methods and the means to directly rip the gun sounds used in San Andreas from my copy of the game. My question is, I wish it were possible for me to translate those sounds over to Project Zomboid.

tacit spire
#

i want to make a mod an i have no experience besides some bad sprites(YOMI hustle). I can go in more detail about it if anyone’s interested

winged ocean
#

Question... I'm trying to upload a mod to the workshop and I have it successfully posted but when I subscribe and enable the mod traits aren't showing up in the character creation screen (i've tested the mod locally so I know it works) also the sandbox settings are displaying correctly as well, but when I enter the debug mode (F11) and try and search for the lua files I can't find them... is there something else I need to be doing. Here is the workshop link if that helps https://steamcommunity.com/sharedfiles/filedetails/?id=3285160052

topaz lake
#

If project zomboid's sound modding only requires switching sound banks then I'm golden. Then again, I'm taking sounds from an entirely different game so the code's not there. I don't know what I'm doing.

#

Come to thibk of it there's a LOT of sounds I could change...

unreal pewter
#

so id like to make a mod that changes what happens when you get the knox infection, such as causing a lot of pain, and maybe increasing hugner drain, im not really sure yet, but basically I don't know of any mods that do that kind of thing, does anyone have any mods that do a similar thing that they could send?

#

i just need something to reference because i have no idea how to go about doing this

topaz lake
#

New Trait: “Search Warrant!”

  • Exclusive to Police Officer occupation
  • “You’ve executed a lot of warrants within your time on the force. Kicking in doors has become second nature to you”
  • Allows the player to kick in a locked door
  • Success depends on strength level, between 1-3 kicks.
  • Any zombie(s) on the other side of the door will be pinned beneath it when it falls/swings open.
  • Con: Lock is destroyed, so the door cannot be locked.
  • Successfully kicking in a door briefly restores happiness.
unreal pewter
winged ocean
unreal pewter
#

right

#

im asking if anyone knows any mods that are at all similar

#

so i can look at their code

#

because i cant find any mods that have any similar thing going on

winged ocean
unreal pewter
#

ive checked that

#

couldnt find anything helpful

#

maybe im just dumb though

dull moss
#

gradient bar in base game doesnt support tooltip
just yoink tooltip code from label

local gradientPreRender = ISGradientBar.prerender
function ISGradientBar:prerender()
    self:updateTooltip()
    gradientPreRender(self);
end

function ISGradientBar:updateTooltip()
    if self.disabled then return; end
    if self:isMouseOver() and self.tooltip then
        local text = self.tooltip
        if not self.tooltipUI then
            self.tooltipUI = ISToolTip:new()
            self.tooltipUI:setOwner(self)
            self.tooltipUI:setVisible(false)
            self.tooltipUI:setAlwaysOnTop(true)
        end
        if not self.tooltipUI:getIsVisible() then
            if string.contains(self.tooltip, "\n") then
                self.tooltipUI.maxLineWidth = 1000 -- don't wrap the lines
            else
                self.tooltipUI.maxLineWidth = 300
            end
            self.tooltipUI:addToUIManager()
            self.tooltipUI:setVisible(true)
        end
        self.tooltipUI.description = text
        self.tooltipUI:setX(self:getAbsoluteX())
        self.tooltipUI:setY(self:getAbsoluteY() + self:getHeight())
    else
        if self.tooltipUI and self.tooltipUI:getIsVisible() then
            self.tooltipUI:setVisible(false)
            self.tooltipUI:removeFromUIManager()
        end
    end
end

function ISGradientBar:setTooltip(tooltip)
    self.tooltip = tooltip;
end
unreal pewter
dull moss
#

have a tooltip

#

gradient bar class or its parents dont have tooltip

#

therefore it doesn't have tooltip

unreal pewter
#

im confused why you sent that ?

dull moss
#

sharing code?

unreal pewter
#

no like im not sure how its related

dull moss
#

its not related to you

unreal pewter
#

or if its even supposed to be

#

oh i see

dull moss
#

related to you is to check superimmune

#

in More Traits

unreal pewter
#

ah i see

#

okay sorry i was confused

#

i think this is quite a bit out of my league

dull moss
#

its fairly simple tbh and tinkering with traits is good way to learn

unreal pewter
#

i see

#

im trying to make it so if you get infected it makes you a lot more physically disabled but you can cure it with a new medical item, but when you do it gives you some new trait thats a bit of a handicap, kinda like prone to illness but also just makes you a bit weaker

#

i know how to do the second part of that

dull moss
#

as a starter project that's a bit overhead imo, i'd simply start by handicapping player with infection

#

and go from there

unreal pewter
#

yeah

#

my end goal for what im working on is a kind of overhaul for zomboid based on a series i like so im kinda just working on random little bits and pieces occasionally

#

i got bored and decided to look into this though i probably wont be able to get it done well for quite a while

#

and on catching when the player is infected, i dont really understand this code, but im gonna scroll through it and ask a couple questions for help, is that alright?

dull moss
#

that's what channel is here for thumbsupcat

#

I asked well over 100 questions in here

#

xdd

unreal pewter
#

alright, so, is there some event thats runs when the player gets infected?

#

trying to figure out how this code figures out that the player is infected and when to run the superimmune code

dull moss
#

i think what he does is that he makes an event when player gets damaged and checks if it gave the infection

#

if i remember correctly, havent looked at MT code in a long while

unreal pewter
#

i can only find two instances of SuperImmuneRecoveryProcess

#

the first one is stating what the function does, the second is this

#
    local player = getPlayer();
    local playerdata = player:getModData();
    ToadTraitParanoia(player, playerdata);
    ToadTraitButter(player);
    UnHighlightScrounger(player, playerdata);
    LeadFoot(player);
    GymGoerUpdate(player);
    HungerCheck(player);
    RestfulSleeperWakeUp(player, playerdata);
    AlbinoTimer(player, playerdata);
    TerminatorGun(player, playerdata);
    BurnWardPatient(player, playerdata)
    SuperImmuneRecoveryProcess();```
#

not sure what this is saying though

#

every minute run SuperImmuneRecoveryProcess?

dull moss
#

Events.OnPlayerUpdate.Add(MainPlayerUpdate);

#
        SuperImmune(player, playerdata);
        Immunocompromised(player, playerdata);
    end```
#

and then look at superimmune from there

#

i guess he doesnt check he just runs it

stray hollow
#

I would like to implement a store box that allows transactions using text boxes. Is there a source I can refer to? I am a beginner coder. plz help me sir.

robust briar
sour island
#

That looks neato

robust briar
#

We have our own currency on Wasteland, called "Guilders" which we have single, 10 stacks, and 50 stacks of already.

sour island
#

I used Base.Money and assign it a stack held in ModData

#

if I were to allow different items to act as currency it'd create situations where you could duplicate the item.

robust briar
#

Ahh. I see. Bummer.

sour island
#

You could disable the use of wallet or cash, and make shops 'sell' guilders.

#

There's options to control change/store credit etc

robust briar
#

Yeah, I looked through everything. It's pretty slick. Better than the store system I am working on

#

but if its not a fluid experience with our established post-apoc currency, players will cry

#

and I already wipe enough tears up everyday with my 4 year old 🤣

sour island
#

Enough people ask about it- I just really don't like currencies using items in vanilla stacks

#

as they're not really stacked

robust briar
#

I just made all our stuff use individual items

#

the stacks are just for the players to organize with

#

they have to unstack to buy

sour island
#

The item merges?

robust briar
#

its separate items, with crafting recipes

#

so 10 "Guilders" crafts into a "Ten Stack of Guilders"

#

and 5 "Ten Stack of Guilders" crafts into a "Fifty Stack of Guilders"

#

and then back again

#

Like so

tacit spire
sour island
#

Dragging the money on other piles of cash merges it

#

Same principle as game night's cards

unreal pewter
#

so, after some testing, i got some results off my test code, being that the print at the end of the following code actually shows up in the console correctly:

    local infectionLevel = player:getBodyDamage():getInfectionLevel()

    -- Apply handicaps based on infection level
    if infectionLevel > 0 then
        -- Minor infection (1-24)
        if infectionLevel <= 24 then
            -- Apply minor handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 10)
        end
        
        -- Mild infection (25-49)
        if infectionLevel >= 25 and infectionLevel <= 49 then
            -- Apply mild handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.75)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 20)
        end
        
        -- Moderate infection (50-74)
        if infectionLevel >= 50 and infectionLevel <= 74 then
            -- Apply moderate handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.5)
            player:getStats():setFatigue(player:getStats():getFatigue() * 1.5)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 30)
        end
        
        -- Severe infection (75-99)
        if infectionLevel >= 75 and infectionLevel <= 99 then
            -- Apply severe handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.25)
            player:getStats():setFatigue(player:getStats():getFatigue() * 2)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 40)
        end

        -- Full infection (100)
        if infectionLevel == 100 then
            -- Apply critical handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.1)
            player:getStats():setFatigue(player:getStats():getFatigue() * 3)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 50)
            player:getTraits():add("ZombieInfected")
        end

        -- Print a message to the console for testing purposes
        print("Player infection level: " .. infectionLevel)
    end
end```
```Events.EveryTenMinutes.Add(checkPlayerInfection)```
#

but i got this error shortly after being infected, and i cant read code so i have no idea what the issue might be

#

the line 12 in question is this:
player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 10)

#

@dull moss any thoughts?

#

the line #66 thing is some debug stuff i have in here to print stuff to the console ill just comment it out for the time being, but the main issue is the line 12 stuff

sour island
#

My guess would be a lowercase letter that should be upper

unreal pewter
#

theres a chance the functions im referencing just dont exist

#

at first when i tried this i did a similar thing for strength and got the same thing

#

i deleted it and now its this, so i guess its that

sour island
unreal pewter
#

ooh i see

sour island
#

Pain is under stats

unreal pewter
#

i wonder how continualpainincrease would work

sour island
#

You'd have to skim the java

unreal pewter
#

what files would these be in??

sour island
#

Don't assume anything - as the codebase is so old, something could have retained a name but work differently

#

I use an old decompiled source - you should check out Umbrella

#

Having trouble finding a link

unreal pewter
#

found it on github

#

this, right?

sour island
#

Umbrella is a collection of LuaCAT typings for Project Zomboid's API.

  • Types are exposed to IntelliSense through EmmyLua, showing what goes where and what's returned.
  • No time spent decompiling the game and running tools to get typings. (They are provided already)
    https://github.com/asledgehammer/Umbrella
sour island
#

Yeah, this lol

#

I use a predecessor so to speak - same typings lookup, but I also have access to decompiled java

#

Helps to see whats going on under the hood with some stuff, alot of modding API isn't really used due to no one else doing anything with a feature.

#

As people usually start modding by digging around other mods + trial and error

unreal pewter
#

okay what does it mean "create new project" in vscode

#

so trying to do this:
Create new project.
Press Ctrl-Shift-P and search for Lua: Open Addon Manager in the context menu that opens.
Search for Umbrella, and click enable.

sour island
#

I used intelliJ so I can't help you with details, but creating a new project is usually done at the top left of most IDE menus

unreal pewter
#

when i search on the second step i cant find anything like that

#

would uhh

#

zomboid support the Ω character, by the way

#

just cant figure out how to get this to work

grizzled fulcrum
#

so if you just File > Open Folder and select your mod folder that counts as a project, and also File > Add Folder to Workspace (add your mod folder) and then saving that workspace also counts as a project

bronze yoke
#

for 'create new project' we basically just mean 'have the thing you're working on open'

drifting ore
#

does setting table mode to "kv" work with Java objects? I.e. would this prevent memory leakage?

bronze yoke
#

no, kahlua doesn't support mode at all

drifting ore
#

god dammit

#

well I need to track zombies. OnlineID always returns -1 for singleplayer games and ZombieID is a random number between 0 and 1000, so that makes neither of them suitable. What other options are there?

bronze yoke
#

it wouldn't be any good for zombies anyway, the objects are recycled

drifting ore
#

yeah I know

bronze yoke
#

their persistent outfit id is the closest thing to a unique id

#

it's not actually guaranteed to be unique though... clashes are pretty unlikely though

#

the persistent outfit id is really a gender flag, an outfit id, a 'hat fallen' flag, and then a random number between 0 and 500

#

which does mean that zombies that spawn with a hat will change id when it falls off tired

drifting ore
#

On that note. How reliable are ObjectIDs for stuff on the ground? It seem to have worked for me, but my setup is calibrated for quick tests specifically.

grizzled fulcrum
drifting ore
grizzled fulcrum
#

funnily enough my case is similar, though I mainly needed an ID for corpses. Like checking if a IsoZombie's ID is the same as the corpse's id (to see if it were the same zombie that died) but I don't think there's a workaround for my case unless I add moddata to a zombie or something so when it dies it carries it over

drifting ore
#

I only use zombieID on a "outgoing" event to retreive and erase payload. On the "incoming" event the zombie overwrites the payload with its new ID

bronze yoke
#

non-player zombie mod data has a few bugs and doesn't seem intended to be used

drifting ore
grizzled fulcrum
#

that SUCKS why cant everything be doable

bronze yoke
grizzled fulcrum
#

something something if only we had vanilla integrated java modding something something steam workshop

#

I wonder how mod loading is done for steam workshop mods

#

like does the game handle most if not all of the detecting and loading files or does steam have some part in this

drifting ore
#

steam may or may not provide the list of mods and folder paths

grizzled fulcrum
#

I think modding would be better like if you just had to install 1 java mod that supports loading other java mods from the steam workshop

bronze yoke
#

it's not that hard to do, no

drifting ore
#

so what's the PZ java modloader called?

bronze yoke
#

there's a couple but i don't remember their names because nobody cares about them

drifting ore
#

sounds like the devs ended up worse off in implementing Lua interface and discouraging java modding, than if they were to just let java modders loose

#

less work and more functionality

bronze yoke
#

i think it was an easy way to sandbox things for them

grizzled fulcrum
#

wait does the game do crc for server files too?

grizzled fulcrum
bronze yoke
#

there are no java mod users because there are no java mods because there are no java mod users etc

#

if someone makes a new mod loader they need to launch it with a killer app

grizzled fulcrum
#

like lua is a lot easier for other people like animators to make small UI for than java

bronze yoke
#

something like multiplayer npcs

drifting ore
bronze yoke
#

wasn't there a malware scare with minecraft mods a few months ago?

grizzled fulcrum
#

may not be relevant but call of duty franchise uses lua for their UI and their own script language for gameplay stuff so that proves it can be done with efficiency in mind

drifting ore
#

IDK, i don't download "totally not a crypto miner.jar" mods

bronze yoke
grizzled fulcrum
#

that's the whole reason why it wasn't really picked up sooner

#

but obviously the binary wasn't legit

bronze yoke
#

i don't remember the full story but basically this malware also messed with your java compiler or something to embed itself into your mods too

#

so developers who had run an infected mod were unknowingly distributing infected mods too

grizzled fulcrum
#

that's actually interesting

#

and smart

drifting ore
#

that's your garden variety trojan virus

bronze yoke
#

yeah, but it really disproves your point doesn't it?

#

you didn't have to download shady mods, you just had to download the most popular mods everyone used

grizzled fulcrum
drifting ore
#

no? it's the same as arguing that Windows users shouldn't be allowed to run any exe's other than those that come from Microsoft.

#

And everything else must be written in Microsoft Visual Basic, for sandboxing.

#

The closest reasonable real life implementation is Apple App Store. And even then it's not a smooth experience.

grizzled fulcrum
#

I think there's blame on both parties, the people who download the mod without looking are technically at fault because they should've "known better" and while that is true (people should know how to look for shady malware stuff), not everyone should need to be able to decompile java and or read asm for each mod they install just to "be safe" from mods

drifting ore
#

No, viruses are illegal, there's no "users are to blame".

grizzled fulcrum
#

well I guess, but that wont stop people from making them

drifting ore
#

I'm just saying that the fact that there exist malicious people doesn't mean the whole venue should be cut at the stem.

grizzled fulcrum
#

also true, but im just saying that the people who download the mods (the users of the mod) are a little at fault, the developer of the malware definitely, the developer of the mod (assuming they didn't intentionally distribute the mod with the malware) too

drifting ore
#

A real life equivalent would be cutting everyone's hands off because hands is what you steal and kill people with.

grizzled fulcrum
#

LOL

drifting ore
#

Technically that logic is true. But it's so asinine the only reasonable reaction is laugh.

grizzled fulcrum
#

rediculous analogies are fun

drifting ore
#

Well it's the same thing here. Except being just a mod for just a game, the stakes are virtually nil.

grizzled fulcrum
#

but the pricinple still stands

drifting ore
#

The prinicple is presumption of guilt. Assume that everyone is guilty of making viruses.

grizzled fulcrum
#

thats why I hate when people say "well that analogy is incorrect because it's so out of line with what would actually happen in the real world"

#

like that's why it's an analogy

#

see you all in 5 years again

drifting ore
#

that almost reads like an ominous warning that the overton window is always sliding and the things unthinkable today are the norm tomorrow

grizzled fulcrum
#

it's sad to think that it is mostly true

drifting ore
#

Imagine you time travel 100 years in the past and said to a car owner that in year 2024 you will not be able to open your sunroof because the manufacturer went bankrupt and their servers shut down.

#

GM cars tattling on you to the insurance companies so they can jack up the rates doesn't sound so bad now, does it? Hahaha.

#

Born too late to explore the seas. Born too early to explore the stars. Born just in time to explore the man-made horrors beyond my comprehension.

grizzled fulcrum
#

all in the name of inflation, corruption and slightly extra profit

drifting ore
#

When you're beholden to people who buy and sell your shares on open market willy-nilly, it was guaranteed to happen, and sooner than later.

#

Anyway I think I'll just shove zombie Java object into the table instead of using any sort of ID.

#

I only need the ID when the zombie stops eating a corpse, so I can update the amount of flesh left. When a zombie starts eating a corpse, it will overwrite the data, so it doesn't matter if there was a collision.

#

I think I'll have to use ObjectID for the corpses - it seems to be persistent, whereas java objects are not.

grizzled fulcrum
#

well good luck, I can't be of much help in this situation because I myself have no idea how zombies work and I even tried reading the java on how IsoZombie gets converted to IsoDeadCorpse but I have no idea and I think it's just a typecast lol I have no idea

grizzled fulcrum
mighty ether
#

solution: make everything exposed, everything public. just dont think about the consequences

stoic pivot
#

Modding in zomboid uses Java?

drifting ore
#

No. But I kinda wish it did, with how half-baked Lua modding API is

grizzled fulcrum
#

unrelated- does HTTP GET work on the Lua side at all? I believe I read that POST isnt supported but just food for thought

stoic pivot
#

Though it was just Lua

#

Oh

mighty ether
#

Java mods exist but are not offically supported

grizzled fulcrum
#

game made in java, has lua as scripting (and ^)

drifting ore
#

the computer doesn't cares

stoic pivot
#

I'm kind of interested in trying out making a mod, but tbf I'm not even sure where to start

mighty ether
#

God I wish shaders were exposed to Lua. You could do so much cool stuff with it

stoic pivot
#

I have some knowledge of Lua apart from other languages, and I can create 3D models though no clue how to put it together

drifting ore
#

3d models and Lua are generally unrelated

mighty ether
drifting ore
#

you put your data in these custom PZ script txt files and XMLs

#

and then they apear in the game

stoic pivot
#

Theoretically it wouldn't even need much

#

Because I'd most likely only change in game values

#

Which I hope are easy to access

grizzled fulcrum
stoic pivot
#

Well changing stats of your chatacter as an example

drifting ore
#

onUse or whatchacallit

stoic pivot
#

Are there any decent guides on modding for pz, even a list of steps could work?

stoic pivot
mighty ether
mellow frigate
#

obsolete

stoic pivot
#

Oh nice

drifting ore
#

and in the script you just do the onUse = mymod.luacallback or something like this, i'm not positive

stoic pivot
#

Thanks

stoic pivot
drifting ore
#

Not sure what you mean but recipes can have callbacks attached that run Lua code.

stoic pivot
#

By recipes you literally mean crafting recipes?

drifting ore
#

Yeah, those.

stoic pivot
#

Okay I should just check out the guide

drifting ore
#

I think items can have those too.

stoic pivot
#

See what's what

grizzled fulcrum
#

store a string?

mellow frigate
grizzled fulcrum
#

oh I now see what you mean, that is a good reference

ancient grail
ancient grail
frank elbow
#

& re. audio streaming: this would be difficult anyhow since we don't really have a way to "construct" new audio on the fly, due to how it's all set up with scripts. No way yet, anyway. With Java mods it'd be feasible

drifting ore
#

What happens exactly when you drop more than 65k items on the floor? Does the game crash?

bronze yoke
#

yeah

drifting ore
#

allright cool, I don't need to worry about integer rollover because the game takes care of it by crashing

bronze yoke
#

the game becomes unplayably slow a long time before that too

drifting ore
#

surely not if you drop 1k items in 65 different spots

#

right?

#

there's no way unloaded items impact performance

bronze yoke
#

not if they're unloaded no

tranquil kindle
#

If i remember correctly even having high amount of bullets in main inventory causes fps loss the more bullets you have

drifting ore
#

so specifically the game reuses IDs when possible but when all of them are taken it crashes, is that correct?

bronze yoke
#

a server i helped out with had an issue with people trolling by dropping huge amounts of items on the ground which made the entire area around that unplayable

#

as long as you were close enough to load that chunk your game pretty much froze

drifting ore
#

when you can drop individual bullets it's very easy to generate large amount of items

#

1k bullets is pretty much chump change

tranquil kindle
#

Yeah, but you didnt even had to drop them

#

If they're in backpack, its fine, but once you move them to main inventory its starts

drifting ore
#

yeah i've heard something about it, as if main inventory is part of the world or something whereas containers exist in a separate warp pocket space

#

kinda bizarre tbh that main inventory is not also just a container

#

i mean the same as every other container

#

Well anyway for my purposes I just need that items in the world have persistent IDs. I..e that they don't change between getting unloaded and then reloaded.

leaden sphinx
#

i need some help making a map in project zomboid, i have made the map already and its in my mod menu, but when i click the map as where i wanna spawn, the menu just disappears.

outer crypt
#

if I have a vehicle in a square and want to get access to the trunk is it along the lines of getVehicle():getItemContainer()?

#

seems like there is a step I am missing, maybe with vehicle parts?

coarse sinew
#

yeah, you probably want to check all parts of the car to see which are containers

leaden sphinx
#

anybody know how to fix my map thing?

unreal pewter
#

nothing showed up when i searched it

#

but “addon manager” does it mean extension manager?

bronze yoke
#

no, the addon manager is part of the lua extension

#

it's specifically for lua typings projects like umbrella

unreal pewter
#

i see, i thought something like that

#

but it wouldnt show up when i did the search

unreal pewter
bronze yoke
#

should be ctrl-shift-p and then open addon manager

unreal pewter
#

i made sure its enabled and everything

bronze yoke
#

weird...

#

i've never heard of someone having this problem, i have no idea what it could be

unreal pewter
#

oh i think i know what it is

#

the page said to install lua language server

#

i think it meant just the extension called "lua"

bronze yoke
#

yeah, that's the one

unreal pewter
#

instead of the extension called lua language server

#

hhh thatd do it

bronze yoke
#

let me check that out, that seems weird

unreal pewter
#

hhhhhh

bronze yoke
#

did you use this?

unreal pewter
#

no

bronze yoke
#

oh huh

#

i'll have to change the text, it's kind of annoying that the good lua extension doesn't really have a consistent name

unreal pewter
#

mention the developer of the extension

bronze yoke
#

luacats is the most common name for it now but the issue originates that the guy who made it never really came up with a name and it just became more and more popular without that changing

bronze yoke
unreal pewter
#

doing that now

bronze yoke
#

fuuck i thought i added that to the readme

unreal pewter
#

my god tyheres like 700 pages of options for the install

bronze yoke
#

we didn't know it was a requirement since we all have git anyway 😅

unreal pewter
bronze yoke
#

nah, it's not there

#

i updated the readme to be a little clearer about those two things, sorry for the confusion!

drifting ore
hazy flicker
#

Hi all, I'm trying to decompile zomboid for modding with capsid following this github readme https://github.com/Konijima/PZ-Libraries?tab=readme-ov-file but am getting a gradle error when trying to run setupWorkspace could anyone be able to give me a hand?

[toshi@ArchLinux Zomboid]$ gradle setupWorkspace

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'Zomboid'.
> Could not create task ':updateZomboidLua'.
> Could not create task ':zomboidVersion'.
> 'org.gradle.api.tasks.JavaExec io.pzstorm.capsid.zomboid.task.ZomboidVersionTask.setMain(java.lang.String)'

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.9/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
GitHub

Complete tutorial to decompile and use Intellisense for Project Zomboid modder. - Konijima/PZ-Libraries

bronze yoke
#

this guide is really really old

#

if you want the libraries that guide generates, umbrella is a lot better and doesn't require you to generate them yourselves

unreal pewter
#

speaking of umbrella how am i supposed to know if its working or not

#

like its saying this is an issue, but its just not

#

do i need to also open zomboid's game files in vsc?

bronze yoke
#

hmm, sounds like it might not be working, what does it say when you mouse over?

unreal pewter
#

undefined global

#

which is why i was saying idk if i also need to reference zomboid's files in my workspace

bronze yoke
#

you shouldn't need to, that stuff is included in umbrella

#

are you getting any autocomplete? if you start typing getPlayer() does it give you suggestions and stuff?

unreal pewter
bronze yoke
#

weirrddd

unreal pewter
#

but it also says this is wrong in the objects file for my map

bronze yoke
#

that's just a style complaint, not an error

#

unfortunately pz does not tend to follow what's considered good lua style

#

mine doesn't seem to recognise suburbsdistributions either...

#

it might be because it's not assigned in a straightforward way in the original file, maybe our lua generator doesn't catch it

#

jab's been working on a new one that's much much more comprehensive but i'll see if something can be done about that in the meantime

#

it feels strange i wouldn't've noticed this before

unreal pewter
#

so whats this addon supposed to do?

bronze yoke
#

the autocomplete and type inference

unreal pewter
#

because i have this code i know spits out errors in-game and it says its fine

#

or rather doesnt say theres issues

bronze yoke
#

it won't be able to catch every problem, it'll just catch typos, wrong function arguments, syntax errors etc

hazy flicker
unreal pewter
#

hh

#

guess ill keep trying to figure out this error then

bronze yoke
#

what problem are you having?

hazy flicker
unreal pewter
#

i dont know what that means

hazy flicker
#

its not however a bug more so a style error

bronze yoke
#

in this case that name is hardcoded so you'll just have to ignore it

#

(apparently tis didn't know about Functions Returning Things when they wrote that system)

hazy flicker
#

im sure you can probably use smth like what eslint does to ignore a lien or smth

#

yuea

unreal pewter
# bronze yoke what problem are you having?

so im trying to figure out how to make some code that adds more handicaps for if the player has the zombie infection, so what i have is something that checks the infection level every 10 in-game minutes, then gets endurance and fatigue and modifies it, and adds pain, but im getting an error relating to line 12, so ill just send some of the code and reference that line

hazy flicker
#
---@diagnostic disable-next-line: lowercase-global

on the line above

bronze yoke
#

if you right click it i think it'll give you a context menu for adding these

hazy flicker
#

to tell it to ignore that line

unreal pewter
#

heres a small bit of it

    local infectionLevel = player:getBodyDamage():getInfectionLevel()

    -- Apply handicaps based on infection level
    if infectionLevel > 0 then
        -- Minor infection (1-24)
        if infectionLevel <= 24 then
            -- Apply minor handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
            player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 10)
        end```
#

the line it has a problem with is
player:getBodyDamage():setPain(player:getBodyDamage():getPain() + 10)

#

this isnt a final thing bc im trying to figure out how the ContinualPainIncrease thing works before messing with that

bronze yoke
#

bodydamage doesn't have a setPain or getPain

#

if i'm remembering right pain is a huge hassle to work with

unreal pewter
#

i see

#

id like to figure out how setContinualPainIncrease works

bronze yoke
#

this is actually something umbrella can catch but it doesn't know the type of player in this function, if you add on the line before your function ---@param player IsoPlayer that'll give it that hint

unreal pewter
#

i see

#

seems that worked

#

and ill try player:getBodyDamage():setContinualPainIncrease(70)

hazy flicker
bronze yoke
#

the ones from that guide had a lot of issues and were getting older and older, as you've seen it doesn't even work properly for most people anymore

hazy flicker
#

ye the rest did decompile for me just not lua bit

unreal pewter
#

is there some way i can make it so actions just drain more endurance? and endurance recovers slower?

#

searching around with the autofill i cant see anything thatd help me with that

#

because the system i have now would just continually drain endurance and fatigue

drifting ore
unreal pewter
#

hgh

#

alright thanks

drifting ore
#

i'd give a specific example but i don't have the folder pinned and digging through filesystem causes explorer.exe to crash so i can't be arsed to do it

unreal pewter
#

yeahh its fine

#

ill search

#

hh nevermind theres like 10x more files here than i thought thered be and i dont wanna dig through all of them

#

ill figure something out

quiet rain
#

I'm having a bit of a weird issue with a clothing mod that I'm working on. I've created a backpack, skinned it to the armature and it shows up all fine ingame.
But when the backpack is worn, the character's animations change to walking as if they're wounded, dragging a leg along and all that, or encumbered maybe, without being encumbered. Anyone have an idea what could be causing that?

outer crypt
#

does anyone know if there is a vehicle equivalent of this from containers? getContainer():getCapacityWeight()

#

I found the capacity getContainerCapacity()

#

and whatever this is was not it from what I can tell

#

getContainerContentAmount()

drifting ore
sour island
#

@grizzled fulcrum

#

I made it for zombie zones to work

#

Basically you calculate the persistentID with hat falling

#

And you get a trueID you can rely on

#

If you're just trying to do something in general - it's more than unique. If your idea is a very specific zombie, and you for example only have 1 of these, id just recommend using modData and setting it as a reanimatedPlayer.

unreal pewter
#

so i have this now

---@param player IsoPlayer
local function onPlayerInfected(player)
    local infectionLevel = player:getBodyDamage():getInfectionLevel()

    -- Apply handicaps based on infection level
    if infectionLevel > 0 then
        -- Minor infection (1-24)
        if infectionLevel <= 24 then
            -- Apply minor handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
            player:getStats():setPain(player:getStats():getPain() + 1)
        end
        
        -- Mild infection (25-49)
        if infectionLevel >= 25 and infectionLevel <= 49 then
            -- Apply mild handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
            player:getStats():setBoredom(player:getStats():getBoredom() - 10)
            player:getStats():setPain(player:getStats():getPain() + 5)
            player:getStats():setPanic(player:getStats():getPanic() + 3)
        end
        
        -- Moderate infection (50-74)
        if infectionLevel >= 50 and infectionLevel <= 74 then
            -- Apply moderate handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.8)
            player:getStats():setFatigue(player:getStats():getFatigue() * 1.3)
            player:getStats():setPain(player:getStats():getPain() + 8)
            player:getStats():setBoredom(player:getStats():getBoredom() - 10)
            player:getStats():setPanic(player:getStats():getPanic() + 8)
        end
        
        -- Severe infection (75-99)
        if infectionLevel >= 75 and infectionLevel <= 99 then
            -- Apply severe handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.7)
            player:getStats():setFatigue(player:getStats():getFatigue() * 1.8)
            player:getStats():setPain(player:getStats():getPain() + 10)
            player:getStats():setBoredom(player:getStats():getBoredom() - 10)
            player:getStats():setPanic(player:getStats():getPanic() + 15)
        end

        -- Full infection (100)
        if infectionLevel == 100 then
            -- Apply critical handicaps
            player:getStats():setEndurance(player:getStats():getEndurance() * 0.6)
            player:getStats():setFatigue(player:getStats():getFatigue() * 2)
            player:getStats():setPain(player:getStats():getPain() + 15)
            player:getStats():setPanic(player:getStats():getPanic() + 30)
            
        end

        -- Print a message to the console for testing purposes
        print("Player infection level: " .. infectionLevel)
    end
end

-- Register the function to run every 10 in-game minutes
Events.EveryTenMinutes.Add(onPlayerInfected)```
#

but im getting this error

bronze yoke
#

EveryTenMinutes doesn't pass any parameters but your function expects an IsoPlayer argument

unreal pewter
#

what

#

uhh

sour island
#

It's client side code use GetPlayer()

#

(sorry coop people)

unreal pewter
#

?

sour island
#

Get player fetches player 0 locally

#

Simplest way to just get the player in any scenario.

unreal pewter
sour island
#

Under your function name, the first line inside, put

player = player or GetPlayer()

sour island
#

I know some people play that way, but it's a chore to distinguish between players.

drifting ore
#

you should probably run this on server side in any case

sour island
#

Alternatively, you could use OnPlayerUpdate

unreal pewter
#

well i have it in lua/server

sour island
#

And add a ten minute check

#

That still runs for clients

#

I don't think this is something that should run on a server tbh

unreal pewter
#

so for example where i have player:getStats() blah blah id do getPlayer():getStats():

unreal pewter
#

oh im blind

sour island
#

But after consideration, you can probably put this in OnPlayerUpdate

drifting ore
sour island
#

If you want it to be less frequent than every tick - which is advisable you can use a time stamp check

unreal pewter
#

well i like the system i have with every 10 minutes

#

ive based the numbers off that

#

id like to be able to just make endurance drain more by actions but i could only figure out how to set endurance

sour island
#

The OnPlayerUpdate suggestion was more to deal with co-op - if you wanted. They're virtually the same event.

unreal pewter
#

i see

sour island
#

The timing is different obviously, but you can mimic that using timestamps

#

The upside is that it will impact all players present on that client

unreal pewter
#

so i should just do player = player or GetPlayer()?

sour island
#

For cases where there is no player sure

unreal pewter
#

what

#

im so confused

sour island
#

No player argument provided to the function

#

X = X or Y, means use X if there is a X, otherwise use Y

#

In your case the EveryTenMinutes doesn't provide an IsoPlayer for your player argument

unreal pewter
#

should i get rid of the isoplayer parameter now, then?

#

or what

sour island
#

It doesn't matter

unreal pewter
#

alright

sour island
#

You're still learning, so the code can be messy for now.

#

It would depend on how it's used though - having functions fill in missing arguments can be useful if you're calling on it in different scenarios.

thick karma
#

It will likely work in most multiplayer situations

#

Coop is potentially misleading since coop is the internal nickname of HOST mode.

#

HOST mode will work, but splitscreen play will require player indexes to be considered

#

(As opposed to treating them all as 0)

#

Multiplayer that is not splitscreen, coop or otherwise, will likely be fine if you use getPlayer()

unreal pewter
#

hhhhhhh

#

still showing this

#

also says this

thick karma
#

@unreal pewter

-- Infection rework
---@param player IsoPlayer
local function onPlayerInfected(player)
    local infectionLevel = player:getBodyDamage():getInfectionLevel()

    -- Print a message to the console for testing purposes
    print("Player infection level: " .. infectionLevel)

    -- Apply handicaps based on infection level
    if infectionLevel == 0 then return end
    
    -- Minor infection (1-24)
    if infectionLevel <= 24 then
        -- Apply minor handicaps
        player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
        player:getStats():setPain(player:getStats():getPain() + 1)        
    -- Mild infection (25-49)
    elseif infectionLevel <= 49 then
        -- Apply mild handicaps
        player:getStats():setEndurance(player:getStats():getEndurance() * 0.9)
        player:getStats():setBoredom(player:getStats():getBoredom() - 10)
        player:getStats():setPain(player:getStats():getPain() + 5)
        player:getStats():setPanic(player:getStats():getPanic() + 3)        
    -- Moderate infection (50-74)
    elseif infectionLevel <= 74 then
        -- Apply moderate handicaps
        player:getStats():setEndurance(player:getStats():getEndurance() * 0.8)
        player:getStats():setFatigue(player:getStats():getFatigue() * 1.3)
        player:getStats():setPain(player:getStats():getPain() + 8)
        player:getStats():setBoredom(player:getStats():getBoredom() - 10)
        player:getStats():setPanic(player:getStats():getPanic() + 8)
#

    -- Severe infection (75-99)
    elseif infectionLevel <= 99 then
        -- Apply severe handicaps
        player:getStats():setEndurance(player:getStats():getEndurance() * 0.7)
        player:getStats():setFatigue(player:getStats():getFatigue() * 1.8)
        player:getStats():setPain(player:getStats():getPain() + 10)
        player:getStats():setBoredom(player:getStats():getBoredom() - 10)
        player:getStats():setPanic(player:getStats():getPanic() + 15)
    -- Full infection (100)
    elseif infectionLevel == 100 then
        -- Apply critical handicaps
        player:getStats():setEndurance(player:getStats():getEndurance() * 0.6)
        player:getStats():setFatigue(player:getStats():getFatigue() * 2)
        player:getStats():setPain(player:getStats():getPain() + 15)
        player:getStats():setPanic(player:getStats():getPanic() + 30)
    end
end

-- Register the function to run every 10 in-game minutes
Events.OnPlayerUpdate.Add(onPlayerInfected)
#

this example uses OnPlayerUpdate but the catch is that it'll no longer fire every 10 in-game minutes. You would need to manually track time change in game for that.

#

This would be how you would make your goal splitscreen compatible while also solving your player does not exist issue

#

Also notice you can use elseif instead to simplify the appearance of the branching logic.

#

So it's if < 24 then do this, elseif < 49 then do that (in which case we know it's also >= 24 and do not need to check), etc.

unreal pewter
#

well the issue with it not running every 10 minutes is just

#

this is already a bandaid solution

thick karma
#

Well if you want it to fire every 10 minutes you could do something like this...

#

manageInfectionHandicaps would loop through all [potentially splitscreen] players on client PC and call the function on each player object.

#

If only 1 player, loop only happens once for index 0 and just works as though you said local player = getPlayer()

vapid acorn
#

`item Ricin
{
DisplayName = Ricin,
DisplayCategory = Food,
Type = Food,
Weight = 0.2,
Icon = Pepper,
CantBeFrozen = TRUE,
EvolvedRecipe = Pizza:1;Soup:1;Stew:1;Pie:1;Stir fry Griddle Pan:1;Stir fry:1;Burger:1;Salad:1;Roasted Vegetables:1;RicePot:1;RicePan:1;PastaPot:1;PastaPan:1;Sandwich:1;Sandwich Baguette:1;Taco:1;Burrito:1;Beverage:1;Beverage2:1;Beer:1;Beer2:1,
Spice = true,
HungerChange = -10,
ThirstChange = 20,
UnhappyChange = 20,
Poison = true,
PoisonPower = 300,
PoisonDetectionLevel = 0,
UseForPoison = 300,
WorldStaticModel = Pepper,
FoodType = NoExplicit,
Tags = MinorIngredient,
}

}`

#

im trying to make a poison that you can put in food. How come when I put it in food the poison effect dissapears and it wont let me put anything else in the stew

#

I guess I don't understand what "UseForPoison" really does

tranquil kindle
unreal pewter
#

hh

#

that

#

might be it

bright fog
dull moss
#

also @unreal pewter make sure to limit max and min values for your thing so you dont launch your stats into the stratosphere.

local function onZombieKill(zombie)
    local player = getPlayer();
    if player:HasTrait("Bloodlust") and player:DistTo(zombie) <= 4 then
        local bodydamage = player:getBodyDamage();
        local stats = player:getStats();
        local stressFromCigarettes = stats:getStressFromCigarettes(); -- 0-1
        local unhappiness = bodydamage:getUnhappynessLevel(); -- 0-100
        local stress = math.max(0, stats:getStress() - stressFromCigarettes); -- 0-1, may be higher with stress from cigarettes
        local panic = stats:getPanic(); -- 0-100
        bodydamage:setUnhappynessLevel(math.max(0, unhappiness - 4 * SBvars.BloodlustMultiplier));
        stats:setStress(math.max(0, stress - 0.04 * SBvars.BloodlustMultiplier));
        stats:setPanic(math.max(0, panic - 4 * SBvars.BloodlustMultiplier));
        if detailedDebug() then print("ETW Logger | onZombieKill(): Bloodlust kill. Unhappiness:"..unhappiness.."->"..bodydamage:getUnhappynessLevel()..", stress: "..math.min(1, stress + stressFromCigarettes).."->"..stats:getStress()..", panic: "..panic.."->"..stats:getPanic()) end
    end
end

as example one of functions I've written

#

use math.min and math.max

vapid acorn
#

can someone explain to me how distribution lua works, I want my item to shop up in game

#

I just want a drinnk that i made to show up in fridges

dull moss
#

look up any mod that adds food

#

check how they do it, one of them 100% will have fridge distribution

#

that's as much info as i can give, never done items

unreal pewter
unreal pewter
#

i can help you out because i just had to learn this

bright fog
unreal pewter
#

the game has a bunch of lists of items that go into various containers and it rolls for what items go in what containers by random chance'

#

to get your items to show up in-game you have to make a function that puts your items into one of those lists

#

basically thatll look like

        table.insert(ProceduralDistributions.list["(Distribution list you want your item to be in)"].items, SpawnWeight)```
#

the spawn weight is just a number, bigger number means higher chance, just experiment around with it

#

so as an example, heres one of my items

#
    table.insert(ProceduralDistributions.list["ClassroomDesk"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["ClassroomDesk"].items, 15)
    ItemPickerJava.Parse()
end```
#

you need to run the table.insert code twice, the first time you state the item, the second time you give the spawn weight

#

so it might end up looking something like this

#

to find the distribution lists, i recommend just going to ProceduralDistributions.lua in the game's files

bronze yoke
unreal pewter
unreal pewter
#

if you dont wanna do that, theres also this wiki page

#

a list of all the distributions

#

the wiki page also has a mini walkthrough, so

dull moss
unreal pewter
#
    table.insert(ProceduralDistributions.list["ClassroomDesk"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["ClassroomDesk"].items, 15)
    table.insert(ProceduralDistributions.list["OfficeDesk"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["OfficeDesk"].items, 8)
    table.insert(ProceduralDistributions.list["BreakRoomCounter"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["BreakRoomCounter"].items, 5)
    table.insert(ProceduralDistributions.list["FridgeGeneric"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["FridgeGeneric"].items, 1)
    table.insert(ProceduralDistributions.list["SchoolLockers"].items, "ProjectGurashi.Bentou")
    table.insert(ProceduralDistributions.list["SchoolLockers"].items, 8)
    table.insert(ProceduralDistributions.list["FridgeSnacks"].items, "ProjectGurashi.PackagedBentou")
    table.insert(ProceduralDistributions.list["FridgeSnacks"].items, 5)
    
    ItemPickerJava.Parse()

end```
#

just sent it as an image to make it easier to read and understand whats going on

dull moss
#

you can make this much more prettier and easier to manage is you put it in the table and then just loop through it
so one entry would be like {"ClassroomDesk", "YourItem", 10} and then you jsut loop through table with something like

for index, tableEntry in ipairs(traitTable) do
        local location, item, chance = tableEntry[1], tableEntry[2], tableEntry[3];
                table.insert(ProceduralDistributions.list[location].items, item)
                table.insert(ProceduralDistributions.list[location].items, chance)
    end
unreal pewter
#

i did end up doing that for everything other than that item

dull moss
#

ah KekW

unreal pewter
#

just thought for the sake of teaching someone completely new to the idea that the straightforward way would be a bit more simple to work out

#

because the first thing i did when i made this code was make it a loop

#

and it was a rough experience

#

(i was completely new to coding)

dull moss
#

maybe its not the best advice but unless you learning coding for your profession but for modding, chatgpt is great for checking thigns here and there. I sometimes write a function and before testing if it works yeet it to chatgpt "hey, will this work in lua?"

unreal pewter
#

well

#

ive tried to do that a lot

#

it ends up giving things that almost work most of the time

#

especially with chatgpt3.5

dull moss
#

ye well that's where you come in 😄

unreal pewter
#

you know how it gives you so many messages with gpt 4

dull moss
#

great tool nontheless

unreal pewter
#

then switches you back to 3.5

#

when i used 4, the code for adding items was perfect and stuff

#

most stuff was incredibly helpful

#

3.5 just gave me the most random bullshit code for how to add items

#

completely not in the formatting or syntax of zomboid at all

dull moss
#

ye asking it to write code for you is different

#

Im talking about sending it code you wrote

unreal pewter
#

ah yeah that too

dull moss
#

it usually manages really well with that

unreal pewter
#

tends to tell me "yep that works" then i get like 50 errors

#

and its like "check for typos!"

#

but yeah its not a horrible tool

#

sometimes its just frustratingly unreliable

#

but usually it works semi-fine

dull moss
#

I'd classify it as "amazing" than "not horrible" from personal experience tbh PepeLaugh

#

that is if you know what you're doing

#

anyway im off this chat for now cya

unreal pewter
#

maybe i just dont know what im doing

#

adios

hollow current
#

gpt really not ideal if you don't have some knowledge in modding. It goes as an assistant tool, not something to code stuff for you completely, since it usually ends up using methods/events that do not exist in the first place

sour island
#

Yeah people expect too much from chatGPT without knowing what to ask for it will give you what you actually asked for like a lazy genie

#

I've used it to mostly to reformat large lists

drifting ore
# hollow current gpt really not ideal if you don't have some knowledge in modding. It goes as an ...

yeah well it functions by hallucinating text that looks like something it seen on the internet. The saving grace here is that in programming, sequences of tokens are structured extremely rigidly so they're easy to replicate exactly. Which is to say, of randomly generated text that needs to match word for word, source code has better odds of this happening. Do NOT attempt to ask it for legal or medical advice. It will look legit but it will almost completely certainly not be. Some people had to find out the hard way.

sour island
#

Or do math where I knew what I wanted - like making shapes in a perspective

#

Or mostly recently, determining the width and height of a placed shape at any angle

drifting ore
#

Also to GPT afecionados I suggest reading up on transformer language models. Very informative.

unreal pewter
#

need a language learning model trained only on zomboid and zomboid mods

grizzled fulcrum
#

Like I asked it to write a formula that increases exponentially using a couple variables. I did have to tweak it very slightly but it worked pretty good

true nova
#

chapgpt is good at talking to you, nothing else. never trust anything it says, always double check if you use it

oak olive
#

im a beginner at modding, somehow my 3d model (.x file) for my item is not showing up ingame, can somebody help me figure this out?

manic relic
#

anyone know if it is possible to have see-through / transparent textures in pz?

#

Im improving the vanilla riot helmet and thought id be cool if the visor was a seperate model that could be up or down

#

and since the visor is basically just plastic, I wanted to try and make it transparent

drifting ore
rancid panther
indigo ferry
#

honestly unless test your mod in runtime you won't know if there is an issue or nah

#

chatgpt can only check for syntax errors

#

when it comes to runtime errors he has a lot of skill issues

grizzled fulcrum
rancid panther
#

that's exactly what i was looking for!

#

thanks!

grizzled fulcrum
#

huh

#

how are you gonna use it, it's very specific

#

unless you just meant like the general format of it I guess?

rancid panther
#

i wont use it but that's basically it

#

has a start date, exponent effect, maximum value

#

i also need a minimum value but that is p simple. just add + b

grizzled fulcrum
#

nice

rancid panther
#

i'll look into this more because the values seem to jump in steps

#

it's for a ramp up effect on my blackouts mod

stray hollow
#

Is there somewhere that provides the basic code for IN THE STONE's Project Zomboid? I want to study while watching. Please let me know.... T0T

grizzled fulcrum
#

like day 1, 2, 3, 4, 5 etc

#

Y axis is how much the effect is applied

#

wait I see what you mean nvm

#

it's because I do math.ceil

frank elbow
frank elbow
drifting ore
frank elbow
drifting ore
#

I feel like this word is appropriately describing its entire mode of operation.

frank elbow
#

🤷🏾 I'm not the language police, say what you want. Just saying it's established terminology in the field & using it differently is a bit misleading

drifting ore
#

I mean. It has no database, so it has no way to fetch true information.

frank elbow
#

If you ask me how many fingers you're holding up & I guess correctly, that's true information despite being determined by chance

drifting ore
#

Precisely. The important factor here is that you made a lucky guess. Not that you knew the truth.

frank elbow
#

Yeah, I'm not arguing that. It's still true information, not a hallucination. See https://en.m.wikipedia.org/wiki/Hallucination_(artificial_intelligence)

In the field of artificial intelligence (AI), a hallucination or artificial hallucination (also called bullshitting, confabulation or delusion) is a response generated by AI which contains false or misleading information presented as fact. This term draws a loose analogy with human psychology, where hallucination typically involves false percept...

drifting ore
#

I'm not here to argue dictionary definitions. Precise meaning of terms as per someone else's definition is hardly relevant in an argument about the subject itself.

frank elbow
#

It is when those words have meaning in the field lol—if I started describing something I'm calling “abstraction” as something that's not that, in a tech-related channel, I would hope someone would correct me

drifting ore
#

Generally, I simply feel like only defining "AI hallucination" as such only if happened to produce false data is misleading about the nature of data AI produces, by making a false implication that it can retreive truthful data rather than just make a guess that simply happens to coincide with truth.

frank elbow
#

Okay, well for the sake of everyone else that happens to read this: hallucination is a word that's used differently by people in the field

frank elbow
drifting ore
#

The word "jet engine" in relation to modern aviation propulsion is also a huge misnomer in the field, and yet here we are.

#

It's called "turbofan engine" and it doesn't even uses the jet to produce thrust, any amount of residual force produced by the core is a wasteful engine inefficiency byproduct.

#

Anyway AI is one of those technologies that people may unknowingly mistake for magic, and I believe it's important to avoid the use of terminology that might further confuse them about it and create greater automation bias.

stray hollow
#

@frank elbow Lua

frank elbow
#

Because surely mixing up your own terminology with existing terminology won't confuse anyone

frank elbow
stray hollow
#

@frank elbow thank you You have become a ray of light for me.

drifting ore
frank elbow
tidal pike
#

Bom meu rei , é difícil você encontrar br por aqui , as mensagens deve ser mandadas em inglês para facilitar que eles respondam , o bot cosin tome cuidado que já me fez passar muita dor de cabeça com informação não muito certa kkk , vc está no GP cantinho dos mod BR , lá tem pessoas já um pouco avançadas pode tirar dúvidas lá tbm

sour island
#

There's already enough misinformation regarding AI, and I'm personally tired of the AI-bad shtick. If you don't personally like the emerging technology don't use it, stop jumping in with exaggerated and loaded terms if your supposed goal is to educate.

frank elbow
#

From there, the Lua files are within media/lua

drifting ore
frank elbow
#

Yeah, I was gonna grab the path but then I was like "oh yeah, operating systems"

drifting ore
#

or in D:\Steam\...

drifting ore
stray hollow
#

i find it!!!

#

@frank elbow i find it!!!

drifting ore
# stray hollow i find it!!!

you can also check out other people's mods code and scripts in \Steam\steamapps\workshop\content\108600. Unfortunately it doesn't say mod names, just IDs. But if you know what to look for it's not too bad.

grizzled fulcrum
#

I just wrote a script to loop through the dirs and tell me the id by the input string and it works well enough for me being lazy lol

frank elbow
#

Adding to that: the IDs there match the ones in Steam Workshop, so if you're curious about a mod you can go to the subfolder with the name matching the number in the URL (or the bottom of the workshop description)

stray hollow
#

@drifting ore Are there any disadvantages to me if I quote another modder's code or use different processing functions?

drifting ore
stray hollow
#

@drifting ore The reason I asked this question was because I checked the codes of the modes that had already been uploaded to implement an online shop using a text box, and they all had similar code, so I asked the question.

sour island
#

Do you mean people using Noirs shop?

drifting ore
grizzled fulcrum
#

dont copy paste if you don't know what it does is what my take is
better to learn what it does and then copy paste because then you'll know much better about it (fix bugs n stuff)

frank elbow
stray hollow
#

@sour island The name of the mod included 'onlineshop'.

sour island
#

I'm not familiar with that one - are you looking for the challenge of making a shop mod? If instead, you're just looking to use a shop - do the 3-4 shop style mods not have what you want?

drifting ore
stray hollow
#

@frank elbow In the sentence 'This makes it clear that we own the mod', does the subject of own refer to 'The Indie Stone'?
Sorry, my English skills are not good, so my literacy skills are poor.

frank elbow
#

No worries—"we" meaning the modders. Modders own the rights to their mods, and grant The Indie Stone a license to use/transform them

sour island
stray hollow
#

@sour island I want to make a store mod, but I'm not sure what exactly 3-4 store mod styles mean.

sour island
frank elbow
#

I can't sue TIS for adding Cool Hat, which is similar to my mod Cool Hat?? 😡

drifting ore
sour island
frank elbow
#

If copyright trolls exist then I'm sure that can too

stray hollow
#

@sour island So, the codes of the mods I saw were the same or similar. Is there any way for me to check who the original owner was?

sour island
#

You'd have to link them here

#

The shop mods I know about are starkly different, outside of being shops.

drifting ore
frank elbow
#

Oh, that idk about. Still seems wise on their part to avoid it

sour island
#

ToS are always full of preventive measures.

#

No prior cases needed to defend it.

drifting ore
#

Yeah. Copyright is copyright. Doesn't matter if you made a 2 line mod, it's still copyrighted.

stray hollow
#

@sour island Could you please wait a moment?

drifting ore
frank elbow
#

This is a modding policy

sour island
#

Very strange way to carry on conversations.

stray hollow
#

@sour island workshop id : 3014751569
workshop id : 3212300283
workshop id : 3207241204

drifting ore
#

I feel like this is a purely good citizen behavior thing since it doesn't seem to be a thing that modders would sue other modders, especially some tiny ones, over a snippet of code.

frank elbow
#

Idt the concern is "modder sues modder"

sour island
#

It's not

frank elbow
#

Moreso "modder makes a mod, PZ adds a similar thing, modder gets mad (and maybe tries to sue TIS)"

sour island
#

Or just makes a big dumb reddit post stirring up drama

#

cause that never happens

frank elbow
#

I'm sensing tea

#

Also see section 5 of the modding policy for details on that CS

drifting ore
#

well as far as I'm concerned anyone can take my code, it's under MIT

#

not that I'm making anything worth taking hahaha

#

speaking of

drifting ore
#

I have this weird issue where I keep track of which squares zombies die on, and it works. But now I added corpse eating mechanic which makes corpses disappear. Simply moving corpses by hand works perfectly every time, but when corpses get eaten they sometimes don't get removed properly, and their data remains lingering in RAM.

stray hollow
#

@sour island What is this?

sour island
sour island
#

Unless you're interested in the challenge, then ok.

drifting ore
#

And the weird part is that the way corpse removal works in my mod is by simply running a periodic check on each registered square and seeing if the body is still there, and if not, unregister the square.

#

And the squares always get unregistered like clockwork. But the corpse eating table, using the same registry, doesn't always ends up deleting the data and it persists even though both the body and the square are gone.

stray hollow
frank elbow
#

Chuck's second message meant that creating your own mod will be a challenge, compared to using an existing mod

stray hollow
#

@sour island sir. Is there any problem if I modify or use the mod code in the link you posted?

stray hollow
sour island
#

Unless you mean the mod I linked yesterday

sour island
#

My answer still applies.

stray hollow
#

@sour island oh my god! The link mod you posted is the framework for all three mods I looked at earlier.

frank elbow
drifting ore
frank elbow
#

Gotcha

frank elbow
stray hollow
frank elbow
#

No worries at all, good luck with creating your mod! If you have any other questions once you get started, feel free to ask

glass tartan
#

How can dual-mode firearms (if possible) be implemented?
Is there a way to toggle the "RackAfterShoot" attribute and change the firerate of a weapon through an action? If not, should one make two identical yet separate firearms, one being pump-action and the other semi-auto, that switches in the players hand through an action?

drifting ore
sour island
grizzled fulcrum
#

Hey, quick question for anyone that knows it, what's the difference between these two?
IsoWorld:getWorldAgeDays() and GameTime:getMultiplier()?

#

Getting days elapsed from the world origin (start) I have always just used the first one, but is this incorrect or is GameTime better to use? I don't understand the GameTime class' purpose for this situation, like what does GameTime represent? client active time, server active time, relative world time, total world time, etc?

sour island
bleak star
#

Hello, I am new to modding and I can't get my 3D model to display. I am encountering this error: MeshAssetManager.loadCallback> Failed to load asset: AssetPath{objectname} can somebody help me ?

tranquil kindle
bleak star
tranquil kindle
tranquil kindle
#

Yes

#

If you starting or doing small mod i'd suggest using module Base, to prevent issues if you were to forget about them.

bleak star
tranquil kindle
#

this is vanila metal pipe model MetalPipe
{
mesh = WorldItems/MetalPipe,
texture = WorldItems/MetalPipe,
}
this is for example Axe:
model HandAxe
model HandAxe
{
mesh = Weapons/1Handed/HandAxe,

    attachment world
    {
        offset = 0.0000 0.1250 0.0000,
        rotate = 180.0000 0.0000 180.0000,
    }
}

so in your case it should be module Base
{
model Mastersword
{
mesh = weapons/1handed/Mastersword,
texture = weapons/1handed/Mastersword,
}
}
But to be honest you can put them in completly diffrent folders as long as you state them here and they're inside models x and textures folder (but its better to organise them)

tranquil kindle
drifting ore
#

Remember ealier I talked about lingering data items? Sure enough the reason I have this bug is because i'm dumb. The way I kept track of coordinates is by doing

            world.eatingCoords[coordstr] = bodyID```
which is fine right? WRONG. Multiple corpses can share the same coordinate, in which case only the last one will get handled properly and the rest will float in RAM.
#

What makes this particularly stupid is that in the same code I have provisions to keep track of multiple bodies on the same square precisely because it's a possibility.

livid badger
#

Hello everyone,

I have a question. I'm making a farming mod and I've implemented a feature where, after a plant decays, if it was a tree, it transforms into a global tree class (IsoTree). However, I'm only able to use the vanilla sprites. I suspect the issue is that my custom tilesets lack the necessary configurations for the IsoTree class.

Does anyone know where to find documentation on adding tilesets for IsoTree?


local square = self:getSquare()
-- Spawn tree in current square #default "e_americanholly_1_3"
if IsoTree and IsoTree.new then
    removeAllButFloor(square)
    -- FIXME: maybe need add dry tilesheets
    local tree = IsoTree.new(square, "e_americanholly_1_3")
    square:AddTileObject(tree)
end
flat panther
#

Does anybody know how to fix the muzzleflash using the same texture as the gun? Never encountered this issue before

tranquil kindle
#

Do let me know if it fixes issue

lost depot
glad parcel
#

Hello. Can anyone please send me the vanilla ZomboidSound.bank??? Silly me forgot to make a backup. Would be very appreciated

lost depot
#

good music taste

bright fog
late thicket
#

yoi guys,
i got a mod idea,i ain't no modder but just an idea.
forgive me if it already exists🗿.

a mod that introduces hordes system,hordes that attack ur base after a specific time interval,till then you can build defences n shit.
maybe making a base a "safehouse" could be the trigger point

#

horde could range btw 100 to 200 smthn zeds,
maybe there could be levels to the horde depending on the base or smthn

#

basically the horde system from "the last day on earth"

young edge
#

There is a mod like that. Horde Night being one of them.

late thicket
young edge
#

I know of at least 2, just search for „horde“ on steam

livid badger
#

Guys anyone known about IsoTree class?

fair jolt
#

Any way to trick zomboid into accepting chunkdata from another save? For patrial backup restore (1 cell)

sour island
dull moss
shadow willow
#

Hello, i'm making my first mod for PZ and i was wondering if it was possible to add new property to base game item with a script ?

bright fog
#

A new type of item you mean ?

shadow willow
#

No

#
    {
        DisplayName = Opened Dog Food,
        DisplayCategory = Food,
        Type = Food,
        Weight = 0.8,
        Icon = DogfoodOpen,
        FoodType = Meat,
        CannedFood = TRUE,
        EatType = can,
        Packaged = TRUE,
        ReplaceOnUse = TinCanEmpty,
        DaysFresh = 5,
        DaysTotallyRotten = 7,
        HungerChange = -30,
        UnhappyChange = 50,
        Calories = 498,
        Carbohydrates = 77.56,
        Lipids = 12.58,
        Proteins = 16.04,
        StaticModel = CanOpen,
        WorldStaticModel = CanOpenDogFood,
        EvolvedRecipeName = Dog Food,
        Tags = HasMetal,
    }```
sour island
#

You can add new params to the item script it will appear in the items ModData.

livid badger
shadow willow
fleet bridge
bronze yoke
#

if you want to add new properties to existing items you need to use lua

fleet bridge
#

like if the food is already spawned, can i make it start expiring

sour island
sour island
sour island
#

In your example you're using a vanilla item- as Albion said, you would need to use Lua to inject into existing items otherwise you need to override the entire script.

fleet bridge
sour island
#

Adding stuff in the script for existing items isn't viable as you'd need to replace the entire script though - if the vanilla expiry params are failing there's probably another reason.

charred pendant
#

Does anyone know if making vehicles not stop so much when driving on grass and hitting zombies is actually doable? I hate that the cars have no inertia and im hoping i could maybe try making it

fleet bridge
#

daikon had a mod that made everything expire, the result in newly created worlds that had a 12-month time-passed was that all food spawned rotten, then immediately disappeared and the containers would need to be "seeded" so that it would respawn items

sour island
#

Also doParam should be ran from the /server/ folder so that it impacts both clients and server. I think that was a major issue with ItemTweaker at the time.

bronze yoke
#

shared works too

sour island
#

I'm partially hating on /shared/ due to how defunct it is lol

fleet bridge
#

the issue is that containers that spawned food would be broken until players manually seeded them, which is a chore and not many players know to do it

bronze yoke
#

i think i'm hating on server for the same reason

sour island
#

Isn't there an option to turn off rotten food deletion?

brisk remnant
fleet bridge
sour island
#

I assume the concept is letting people eat expired food at their own risk?

#

You could create your own version of expiring for foods that are shelf stable

bronze yoke
#

so is it that it doesn't spawn correctly or that already spawned items have problems?

sour island
#

I think the vanilla expiration system was intended for rotting foods anyway

fleet bridge
#

Nah, it was some weird crusade against Sapphs mod because you can craft like 20 unexpirable things and it basically eliminated the need to even have a fridge

brisk remnant
sour island
#

There's a lot hard coded into vehicles and also not enough exposed stuff. 😢

fleet bridge
#

I love the mod but you can make everlasting burritos and dumplings and whatnot that bypasses the need to refridgerate your stuff lol

sour island
#

Incidentally, I re-discovered an onUpdate function for vehicles

bronze yoke
#

not the vehicle part one?

coarse sinew
sour island
charred pendant
sour island
#

I've been using on player update and on player swing

coarse sinew
bronze yoke
#

the part update is staggered in a weird way

sour island
#

Yeah it appears to be every 10 ticks

charred pendant
bronze yoke
#

it targets a rate of every half an in-game minute

fleet bridge
#

is there a way to get engine quality to update?

#

i can change it, but it never seems to sync with client until the chunk is reloaded

bronze yoke
#

that means it runs inconsistently at different day lengths

sour island
#

Armor also takes the hits entirely for its parent part

bronze yoke
#

yeah that's how i found out about it too

sour island
#

I started messing with those Lua events for parts to try and do some fun stuff

#

RNG load outs for vehicles etc

bronze yoke
sour island
#

I'll check it out

#

I found out in a print, cause I was working on military ignition (push to start) and unlockable doors.

#

Rn I have it fire on Init and Create to catch new/old spawns.

#

I assumed Init covers both, but haven't tested

bronze yoke
#

init covers both, yeah

sour island
#

Good to know ty

bronze yoke
#

which i find a little bit annoying because 'init' yells 'first time initialisation' to me but it's actually the one you don't want to use for that

sour island
#

The table param for vehicle parts is insanely powerful too

#

Basically modData though

bronze yoke
#

yeah, i got pretty fancy with those when i was writing an armour mod

sour island
#

Did you release it?

bronze yoke
#

nah

#

it was supposed to be armour for all vanilla vehicles but the modeller i was working with got busy and then another one came out so we sort of lost our thunder

#

(i maintain that their models looked a lot better than the other mod though)

sour island
#

Ah, for better or for worse the person I'm working with likes to keep things inhouse

#

So despite the other mod being a thing I've just kind of written it anyway 💀

#

I think their armor doesn't work as armor though?

#

Due to how the game handles hitting cars that is

#

Speaking of which, I'm really close to just rewriting the weapon hit event and using the hook and releasing it as an API

#

It would let people aim for headlights or tires

tacit plover
sour island
#

Rn it's just windows->doors

bronze yoke
#

that'd be very helpful

fleet bridge
tacit plover
#

sure

sour island
#

Is there a projects post in moddingCommunity for your cooking/mods Saph?

#

(I thought there was)

#

Nvm mixed it up with pwr's farming mod

#

Unless you have your own discord, for bug reports I try to have people use GitHub or join the community modding discord

#

We setup a little hub for on-going projects

tacit plover
#

i have a discord and a steam post for bugs and stuff

#

I dont have a lot of time to play so I tend to miss a few things when bug testing

sour island
#

Same

#

Steam comments are unfortunately a good way to never see anything - almost anything else is better

tacit plover
#

hehe, yeah
I'll make a project post when I get home from work, should help when releasing new updates catto_noted

grizzled fulcrum
#

Like only a very small amount go out of their way to post issues on GitHub

#

Which is annoying because I don't check steam workshop every second and steam doesn't give me notifications even when I'm subscribed to the thread so I end up not reading them.

bronze yoke
#

most mod users don't have github accounts and don't care enough to make one to report a bug

dull moss
sour island
#

I call that a win tbh

bronze yoke
#

depends how popular your mods are

dull moss
#

idk chief I got 180k subs and 0 github bug reports PepeLaugh

sour island
#

Victory

dull moss
#

surely

sour island
#

checks out 👍

#

But honestly, having a place with some sense of tracking, issue management, beats random comments

dull moss
#

i have bug reports forum on my discord

#

pretty good for that

sour island
#

If they don't have the patience to sign up to github their reports won't be useful or detailed anyway

dull moss
#

disagree

#

I get plenty of quality reports on discord

#

every and now and then there's something like this tho

sour island
#

Same logic applies, if they didn't have discord and didn't 'feel' like signing up for it

dull moss
#

who doesnt have discord

sour island
#

My greater point is people leaving steam comments are hit or miss, more so miss, cause you can't curate or guide-rail

bronze yoke
#

the difference is that the overlap between pz players and discord users is almost 100% whereas github is for a completely different audience

dull moss
#

^

sour island
#

That's fair, but my point wasn't that

bronze yoke
#

gamers don't need github accounts (and honestly i wish they'd stay off it more, i don't want to hear 'where's the download button' ever again 😭)

sour island
#

And focusing on the platform aspect is not what I was talking about

#

To alter the hypothetical - they find out they have to join a discord-server to report a bug and go 'eeeeh nah'

#

Chances are the their attitude would suck, and getting useful information from it would be pulling teeth

dull moss
#

i feel like we got 2 different audiences for our mods PepeLaugh

#

havent seen a guy with attitude yet

sour island
#

I probably have a larger pool of people lol

dull moss
#

true

sour island
#

Adding some form of guidance is good though - I think we both agree steam comments are less than ideal

dull moss
#

steam comments are trash for bugs

sour island
#

Github, discord, something/anything

bronze yoke
#

the other week i had a russian guy posting full pages of comments crying about my mod being abandoned (last updated two months ago) but apart from that i don't really get much stuff i'd want to filter out

sour island
#

I get yelled at for updating, and for not updating too 😐

#

'Has this been updated? does it still work?'

#

Dude, the base game hasn't been updated- what would change???

bronze yoke
#

it was quite funny, the impression i got from the google translation was genuine despair

sour island
#

I recently got someone who I think is reuploading the recovery journal, and is upset the item doesn't appear in game (since I made it that way) and they're saying 'mod doesn't work' with no context. 💀

#

Also, I wasn't trying to say everyone is bad in Steam comments - more so when people are frustrated with an issue - it helps to give them a controlled outlet. Chances are the patient ones will also provide good feedback/back and forth, and the people who just want to vent/yell at the void won't have the energy to sign-up to anything.

dull moss
#

hurr durr bad mad

#

xdd

sour island
#

Case in point lol

#

'mod broken', "Oh, can you elaborate?", 'no'

#

'just saying' types

dull moss
#

I stopped reading at "you chose wrong times to update your mods"

sour island
#

The incident about 5 times in an hour isn't true either

#

This is a case of 'old man yelling at the sky'

thick karma