#mod_development
1 messages · Page 138 of 1
It's type-safety meets OOP tools with JavaScript.
Heh.
I wrote PipeWrench so I can mod in TypeScript for PZ.
I don't really like Lua all that much.
i just want to get better at coding in general
so i can get a job in the coding industry
that's the dream lol
i have decent personal experience but trying to get your foot in the door without a degree or prior professional experience is pain
i code w/o professional experience or degree, it's just an investment
Question I'm trying to code in lua but I'm struggling to get the methods that PZ uses. I've tried decompiling the luamanager but it crashes everytime I try to decompile, any advice?
no need to decompile the Java code, use these docs
https://projectzomboid.com/modding/index.html
package index
beat ya :P
i mean yeah same i have done tons of coding related stuff. Mostly themes for websites and websites themselves, some javascript extensions, and I completely automated my last job lol
i just want to get a coding job so i can make $$$
get a sysadmin job and fake it with ChatGPT until you make it

from what i've heard its cozy
but also getting taken seriously as a woman in the computer field is dreadful
so that's super fun
Alternative with generated parameter options: https://github.com/asledgehammer/PipeWrench/tree/stable/java
@red tiger are you manually removing your link previews or is that a bot
sysadmin usually don't interact with people IRL
That'd be me.
king shit
It's out of respect to not flood the chat.
love to see mindfulness like that
It's also why I post files over code blocks.
were you the one that like two days ago told me about syntax highlighting with the discord code blocks
Very likely.
bc ive been using code blocks and the highlighting ever since and its amazing
I do this to everyone I see who plain pastes their code here.
i love this discord man. Everyone here has been so nice and helpful
and y'all are some smart mfs
i wanna get there someday
unfortunately most of the things ive coded are only useful to me so i can't really share them
Nothing stopping you from starting today.
Just make sure you're correct and know it before giving definite / confident answers.
Nothing wrong learning with the one you help.
out of all of my stupid code, the SOUND is what's bugging my entire mod functionality

its nothing special but i think it makes youtube a lot better lol
Like.. just have fun.
Good things will follow.
I have honestly no aim with my work. This code started out as a meme and PipeWrench too.
I hated Lua so much that I joked about compiling to it.
Then I found TSTL.
Dunning–Kruger effect 
8 months of work followed.
it be like that
You simply follow what's fun.
i got pissed off at one single field on my company CRM that IT couldn't bother to fix
TIL the workshop rating system... uses stars to represent upvotes 
I fail to do this like every second thing I blurt out of my fat mouth
i was wondering why i couldnt rate a mod with stars
and cover it up with "i'm still new and learning"
mindfulness is definitely a learned skill
it's cuz u cant... they just have stars for no reason
you can rate a mod with no stars
yea i know
my new mod has no stars but upvotes
but the stars are represented by the upvotes
all this time i thought they were 2 different rating systems
any change you know how many ratings you need to get the stars to show up?
apparently u need 75 upvotes for 3 stars? not sure
dang ill never get that 💀
and 200 for 4 stars
is this the cigarette mod?
1-4 stars are easy to reach
although i will say i'm really fucking proud that my first mod has that many subs
I said I'd get all Recipe properties put into my extension before midnight.. and I'm having fun talking here.
lol.
no my previous mod
25 positive ratings gets you 3 stars
afterwards it gets convoluted
ahh nice
it's a very good mod for a problem many pol have with patching clothes
honestly i was amazed it hadnt been done yet
there was an invisible patches mod already out there but i saw it had errors
do people just not patch their clothes?
congrats pretty soon you will have alot more high ranking mods
just run around with dookie stain leather patches?
My first mod in PZ was an anecdotal situation. It absolutely blew up.
most ppl do not do tailoring
they prefer pristine invisible patches
i'm really excited for the mod I want to make eventually
its going to be an absolutely massive undertaking
but theres nothing like it on the workshop
welp not all cuz somepeople wants the post apoc vibe
yes, people are different
yep
I wish I could get the drunk emote as my badge for this server.
better give them choices
that's why i run around as a goth e girl stomping zombies with my big goth boots
tailoring in vanilla is a PITA POS system that requires you to cheat to make it seem worthwhile
amphetamae can i have the text coding for how you added your mods in the workshop description?
probably just an imgur img and url
was a pain
one sec
[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2949818236][img]https://i.imgur.com/4Ia4Tue.png[/img][/url][noparse] [/noparse][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2951287846][img]https://i.imgur.com/pDYJFPo.png[/img][/url]```
has to be all on one line or it will insert a line break between the images
note that widgets do not seem to work on workshop pages
i see thank you
or at least I couldn't get them too
also be aware that for some reason, not all image links work
for example, linking an image from the pz forum did not work so i had to use imgur as a host
not mentioned in that guide I just linked is that there is more than just he [h1] format
ah
i think it goes all the way to [h4]
i have used bbcode before
so im familiar with a lot of these
i should probably add that for easy self promotion
had to google bbcode
interesting
Security
If you allow users to use HTML, you have to protect your webpage against malicious scripts in
<script>tags.
because i was like "why would anyone use bbcode when html exists"
but that's a solid point
i really enjoy formatting text and making things look pretty
i honestly wouldn't mind formatting a description for your page if you want me to
wouldn't take me too long
Sometimes, Steam filters out outside links, so I upload images to another private mod instead of using Imgur
yea me too. i can do that on my own thanks

also if you want this
[img]https://steamuserimages-a.akamaihd.net/ugc/1660101375273576639/0C12E325C464F5DC166E5FF2AB70A43581BED64F/[/img]
i took this from another mods page, but ive seen the exact same gif on many other mods by different creators so I assume its fair use
(if someone thinks that's bad please let me know and i'll remove it immediately)
thank u very much
of course, happy to help however i can
also, the "other mods" image links at the bottom of my mod are a little too big i think
i recommend resizing your images to 100x100 if you're going to do something similar
esp if you have several mods
there's a way to change the length and width of an image in bbcode im p sure
unfortunately theres no way to set height and width properties in the img tag
that i found at least
if you figure that out, ill owe you big time
Cool. Just made my property API auto-populate with a float value for float properties and int values for int properties.
That should help people.
based
?imw=100&imh=100
also the fact i'm just figuring out the separate zomboid exe with local cache pisses me off so much
ive been sitting here with like 10 minute load times from all my mods
now i do this and i can load up with two mods in like a minute


i looked up resizing an image with bbcode and it looks like the standard way to do it is [img=100x50]
unfortunately, does not work in steam
try this
[img]https://steamuserimages-a.akamaihd.net/ugc/1749106328797076821/645FD7D2186000D12D667825B039D30C350056E5/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[/img]
imw=150&imh=150
with a link
[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2854030563][img]https://steamuserimages-a.akamaihd.net/ugc/1749106328797076821/645FD7D2186000D12D667825B039D30C350056E5/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[/img][/url]
hmmm
i can't seem to get it to work with my images
[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2949818236][img]https://i.imgur.com/4Ia4Tue.png/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[[/img][/url][noparse] [/noparse][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2951287846][img]https://i.imgur.com/pDYJFPo.pngimw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[[/img][/url]
here you can see i tried adding the imw thing with /? before it to the first link
and adding it directly after .png in the second link
neither seems to have worked
do you think you could help me with the formatting with my images?
I guess that's specific to Steam images
upload images to another of your private mod instead
well i guess i could use the mod pages preview image
Going to spread this logic to all Lua properties and then head out.
People are going to flip when they see auto-fill for Lua method references.
They'll have to make them in Lua but yeah.
The goal is to make it easier on people who don't know what the property is or does.
This is what my API config looks like: (Uses custom completion function over the generic one):
OnTest: {
type: 'string',
onComplete: (name: string | undefined): vscode.CompletionItem => {
const key = 'OnTest';
const desc = `
### Description:
The parameter contains the name of the Lua function that
checks the resources (items) used in crafting and returns
true or false.
### Example:
\`\`\`zed
OnTest: Recipe.OnTest.IsNotWorn,
\`\`\`
### Implemented Lua Function:
\`\`\`lua
function Recipe.OnTest.IsNotWorn(item)
if instanceof(item, "Clothing") then
return not item:isWorn()
end
return true
end
\`\`\`
`;
const nameProper = name
?.toLowerCase()
.split(' ')
.map((o) => {
if(o.length) {
o = o[0].toUpperCase() + o.substring(1);
}
return o;
})
.join('');
const item = new vscode.CompletionItem(key);
item.documentation = new vscode.MarkdownString(desc);
item.insertText = new vscode.SnippetString(key + ': Recipe.OnTest.${1|' + nameProper + '|},');
return item;
},
},
This is what you don't see.
you know what I would appreciate in your vscode extension that would have saved me a lot of time?
checking for difference in : and .
Heh. Eventually.
Oh wait Lua nvm
i didn't understand the difference when trying to add / replace a function and it took me literal hours to figure out why
simply because of having . instead of :
maddening, but part of the learning process
Lua has zero checking.
Lua isn't designed to check pre-runtime.
I'd literally be shooting myself in the foot if I tried to do that.
yeah i tried to search for something like that and all i got was some pcall function that i couldn't really get to work how i wanted it to
so i just said fuck it
I wrote TypeScript alternative to fix this.
I'll eventually convert everyone.
i stopped using : for function definitions because emmylua won't understand the type 
Muhahahah
(Laughs in JavaScript)
export function toPascalCase(str: string): string {
return str
.trim()
.toLowerCase()
.split(' ')
.map((o) => {
if (o.length) {
o = o[0].toUpperCase() + o.substring(1);
}
return o;
})
.join('');
}
switched over to using the images from steam and your solution worked for me
very much appreciated, thank you
Embrace the fattening of the code.
heres the updated mod description link thing with custom image sizes
note that the images must be steam image links
i recommend making the size 150 x 150
[url=https://steamcommunity.com/sharedfiles/filedetails/?id=2949818236][img]https://steamuserimages-a.akamaihd.net/ugc/2046362392225211607/72B0EBF6F283ADFEC058805DC437E6B06EEC21CD/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[/img][/url][noparse] [/noparse][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2951287846][img]https://steamuserimages-a.akamaihd.net/ugc/2046363109997134551/25FB1A820B4AD7852AF82B879EE045769A79EC91/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true[/img][/url]
must all be on one line or it will insert a line break between images
/?imw=150&imh=150&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=true
the first two numbers are where you set the custom width and height
i feel like i should write a guide on this description formatting because all i found online is outdated shit
apparently, when I remove a function from my event, it breaks the rest of the functions called by the event

literally just
Events.OnParachuteLanding.Remove(ParachuteSoundAfterLanding)
like any other vanilla event. Why does this break everything?
it should be syntactically correct
i feel like im having deja vu
very cool idea
you might
i'm still getting to know everyone
so I may have come to this realization before
i could swear like 4 different people recognized that I uploaded the parachute mod
#famous
"haha yes thank you"
Does anyone know where I can find the default vanilla VHS tapes and how to make my own? I remember I've done it in the past but for the love of god I can not remember the vanill file
probably a .x file
how else can I time timed actions to perform after another event, when they are in completely separate blocks of code
ill take a look real quick
you mean the item script, model, icon, or texture? 😂
i'd need more detail on why you can't just call the function
because params. ill post SS
are you calling it during the event handling?
functions with queue actions. params are complicated
function InsurgentWeaponUtil.equipAndFullyLoadWeapon(player, weapon, magName)
local mag = InsurgentWeaponUtil.addMag(player, magName)
mag:setCurrentAmmoCount(mag:getMaxAmmo() + 1)
InsurgentWeaponUtil.equipWeapon(player, weapon)
ISTimedActionQueue.add(ISInsertMagazine:new(player, weapon, mag))
end
function InsurgentWeaponUtil.equipWeapon(player, weapon)
ISTimedActionQueue.add(ISEquipWeaponAction:new(player, weapon, 30, true, weapon:isTwoHandWeapon()))
end
elaborate on event handling
This is what I got done today. =)
https://github.com/asledgehammer/ZedScript-VSCode/blob/main/src/scope/Recipe.ts
Happy.
Very happy.
where I trigger the event
function ParachutingAction:perform() -- Trigger when the action is complete
self.action:setBlockMovementEtc(false)
ISBaseTimedAction.perform(self)
triggerEvent("OnParachuteLanding", self.character)
print("["..modName.."] Finished timed action")
end
how I initialize the event in lua\shared
if you remove a function from the event while the game is still looping through the event functions, the index gets offset and it messes up
it's sort of hard to describe
it's like removing elements from a table while looping through that table
the functions fire by index?
this is what i've heard anyway
jeez i wonder why my mod isn't fucking working or doing anything when i add new code
realize i just switched to a local cached version of zomboid and i'm still editing the old files so its not updating on the version i'm actually using
i'm gonna scream
why are you using local cached version?
so i don't have to load like 400 mods
reduces my load time to nothing
also this way i'm not touching the main version of the mod
kinda version control
would it make sense to have a handler function that is added at the end, to remove all the prior functions before it?
that'd probably be fine
the spaghetti thickens
can world objects like traps also have persistent modData?
not yet exactly sure but I think the "trap" I am working with a an isoObject
all isoobject derivatives have moddata
I think I'm a little stupid and don't need to remove these functions from my event
and have basically wasted time being infuriated with code that is working as intended
is there a simple lua function that adds recipe that is stated in script folder?
recipes are automatically added in the script folder
if you want lua functionality, you need to write a function for it
yea i knew they are automatically added when i have it on script file
but to give better question
i wanted to make an item
that gives recipe
ah. that I do not know, but you can probably look for items in the game that do that, in the script files
I am a creature of the night.
item GenBlueprint
{
DisplayCategory = WURO_items,
DisplayName = Generator Blueprints,
Type = Literature,
Icon = GenBlueprint,
Weight = 0.1,
WorldStaticModel = CreditCard,
Tooltip = Contains instruction about generators,
TeachedRecipes = Generator Tech
}
```
The types block off functionality between items, you may be restricted to needing to use Literature type
i don't know if I can also include onCreate parameter in literature type item
I'm scared about making this extension for the reason of knowing how to answer more questions in here.
knowledge is scary
People seeking knowledge is scary.
Wanna know something even more scary?
I haven't sat down and played PZ since February of last year.
Everything up until now has been modding.
i haven't sat down to play PZ legitimately since I started this mess, and its been 2 months
i think i've had maybe two zomboid saves in the last year?
zㅋㅋㅋ
modding is the new game for me
why are we modding a game to improve it if we aren't playing the game while it's continuously being improved? 
haha watching youtube?
Hahaha help me
xD
I'm more interested in transpilers and tools than playing games.
PZ needs so much more love with improving API and language design.
is there a way to clear all functions added to an event or do I have to hard-code it?
ah shoot nvm this clears everything, oh no
Sometimes simple can be too powerful.
Remove the function that you add when you need to.
Assign to a var and call Remove when you need to remove it
Something tells me that I am going to write a second goddamn vscode extension for Lua .
Hahaha
doesn't change that it's hardcoded. I don't mind explicitly removing each function or making a loop that removes from a table I made, but I wish it could be dynamic
Don't expect this to happen.
One-time fired event handlers would be insanely useful though...
Once you write one that works it isn't hard after.
Does somebody ever tried to add animation for placed 3d objects or sprite furniture? 😅
Aren't map tiles static sprites in build 41?
Ah ok
addGridSquareMarker(int int1, int int2, int int3, float float1, float float2, float float3, float float4)
anyone know what those int 123 and float 1234 do?
public WorldMapGridSquareMarker addGridSquareMarker(int paramInt1, int paramInt2, int paramInt3, float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4) {
WorldMapGridSquareMarker worldMapGridSquareMarker = ((WorldMapGridSquareMarker)s_gridSquareMarkerPool.alloc()).init(paramInt1, paramInt2, paramInt3, paramFloat1, paramFloat2, paramFloat3, paramFloat4);
this.m_markers.add(worldMapGridSquareMarker);
return worldMapGridSquareMarker;```
the javadoc has parameter names
this was all i could find..
If I opened my laptop I could find out
public WorldMapGridSquareMarker addGridSquareMarker(int worldX, int worldY, int radius, float r, float g, float b, float a)
Oh yeah, thanks. Suddenly i totally forgot about them after surviving for a couple of month x)
Thanks a lot
they are super special though, so beware
Albion the freaking hero of the people...
why couldn't they just write that on .class
it's lost after compilation
Whatever made TIS care enough to update their docs thank you..
yeah holy crap
the website is fast for finding things, reading the source is still very useful
sometimes it still won't be clear what something does, best to just read the source when that happens
It's how they compile the game for production.
As someone who has worked with the most obfuscated code in reverse engineering, what they do to obfuscate the end result isn't worth it m
boom~
I'd rather see modders getting what info they need to do what they came to do.
finally, I got a documented error. now I can figure out the second portion of my code that doesn't work
attempted index: isTwoHandWeapon of non-table: null
looks like I missed a thing to tweak
Thanks for being epic albion with helping people here. Lurk mode activated.
function GenRepair_OnCreate(items, result, player)
local locX = player:getX
local locY = player:getY
local locZ = player:getZ
local checkX = 200
local checkY = 200
local checkZ = 0
if locX == checkX and locY == checkY and == locZ == checkZ then
player:say("FIXED!")
else
local _square = getCell():getGridSquare(checkX,checkY,checkZ)
local circle = getWorldMarkers():addGridSquareMarker("circle_center", "circle_only_highlight", _square, 0.2, 1.0, 0.2, true, 1,0.1,0,100);
--circle:remove()
end
end
not sure if i did this correctly..
probably not really a good idea to use exact x y z coordinates though..
maybe i should use chunk intead..
player:getX
shouldn't this be getX()?
wanted to make , when perfomed oncreate action, the game checks the player's xyz and if the player is at the right spot, it produce Fixed saying, while not, it produce a circle marker at the correct place
or is it an int
if i do getCell:getGridSquare() in client
will that only work on 1 person in MP?
logically it should...
you probably need to execute that in the client
yea
i dont' want recieving 20 diff. responses
xD
looks like isoplayer don't have getGridSquire() function inherited
haha
ah, getPlayer():getCell():getGridSquare() works.
ill use that instead of X Y Z
a gridsquare is 10x10 right?
hmmm, honestly idk
gotcha
I only know cells and isogridsquares
getGridSquare(int x, int y, int z)```
do i have to give int X Y Z in this constructor?
wouldn't getPlayer
just automatically fill it in and return gridsqure value of where character is standing?
i would first get the player's square and then the x y z from that object
i don't have any map stuff in front of me right now so I don't know the execution
hmm i guess ill have to run the game and find out...what is returned when i do getPlayer():getCell():getGridSquare()
on console
or are you trying to getPlayer():getCurrentSquare()?
i am trying to compare what i get from getPlayer():getCell():getGridSquare()
to a set gridsquare
so when a player enters that gridsqure
a function can b executed
ah gotcha
basically this
wait... it worked? no no no, this can't be. I'm supposed to be debugging mods, that's all that I do, WHAT DO YOU MEAN IT JUST WORKS NOW? NOW I HAVE TO STOP DEBUGGING THAT'S ALL I KNOW
yay 😄
That is not at all what I'm looking for. Those are objects and images. I'm looking for the file wher the VHS's are defined, the text, skill etc. they display
my bad, your question was a little unclear on exactly what you wanted
That's on my end, I apologize
I have won. It's over.
https://steamcommunity.com/sharedfiles/filedetails/?id=2948659911
nicely done
what r the backpack's stats?
hmm, i found some file like record media and translate EN, so i guess its use for the VHS tape.
The question is i see it’s line has structure like RM-abcxyz
So this line is generate or we just type what we want?
good choice
i want to make a drug mod but theres already so many on the workshop
:/
i just finished the first update to my clove cigarettes mod though
u can make whatever u want and make it better than all the alternatives out there
added a carton of cloves
that's how you win in this world
which is a recipe item
made another custom model for it too
it was a pain in the ass
lol
nice nice
its a shitty model but its so small you can't really tell
we love shitty models in this house
it's a box, how can it be shitty
how many packs r in there
that honestly looks perfectly fine
24 cigs
my next step is randomizing the amount of cigarettes that get dropped
i found a mod that does exactly that
24 individual cigs? you might be able to make the box thinner then
trying to contact the owner for permission to use some of his code
idk i kinda like it bulky so you can see it
i know its not proportionally accurate but i think it looks better
what the real thing looks like
i basically just ripped the faces from this image and transformed them onto the model
ah
i guess the real thing would have like 6 or 8 packs in a box. 12 per pack so 72 / 96 individual cigarettes per carton
and that just seems like too much to be able to drop
but on the other hand it would help with cigarette hoarders who need to pack large amounts

it is helpful to have a carton to carry more cigs, for those with smoker trait
ive honestly never even used the smoking mechanics in this game
did you make your cigs compatible with the smoker trait? you need to decrease smoking stress rather than just normal stress
if its suuuper simple (like a ZombRand(), wink wink), then don't bother.
hmm alr
do u already know how to make it spawn with an exact amount inside?
not really. I've done very, very little with loot distribution
or only spawns as an item with a normal recipe to give u 24 cigs back?
{
DisplayCategory = Junk,
Count = 12,
HungerChange = 0,
StressChange = -3,
UnhappyChange = -3,
Weight = 0.001,
RequireInHandOrInventory = Matches/Lighter,
Type = Food,
DisplayName = Clove cigarettes,
Icon = cloves,
Tooltip = Get lung cancer in the edgiest way,
CustomContextMenu = Smoke,
CantBeFrozen = TRUE,
OnEat = OnEat_Cigarettes,
StaticModel = clove,
EatType = Cigarettes,
WorldStaticModel = clove_ground,
}
item ClovePack
{
Weight = .01,
Type = Normal,
DisplayName = Pack of Clove Cigarettes,
DisplayCategory = Junk,
StaticModel = cloveBox,
WorldStaticModel = cloveBox,
Icon = clovePack,
}```
if you make it a drainable item with 24 uses, you can make it spawn with a random fill
{
ClovePack,
Result:CloveCigarettes=2,
Time:10.0,
}
recipe Pack Cloves
{
CloveCigarettes = 24,
Result:ClovePack,
Time:10,
}```
this is the code
and then every use removes 1 cig
hmm
that's a solid idea
i'm also trying to modify the individual clove cig distribution thoughh
which i can't make a drainable
just take a look at the Smoker mod, uses standard code, nothing special
drainable as in removing 1 from a pack
basically what the cigarette randomizer mod does is check if a container has cigarettes, roll a random, and remove a certain number of cigarettes from the container
thats basically what i'm going to try to recreate
local function removeCigarettesFromContainer(_container)
if not _container then return; end
local chance = ZombRand(100)
if chance == 0 then return; end
local containerItems = _container:getItems()
local itemsToRemove= {};
if containerItems then
for i = 0, containerItems:size()-1 do
local item = containerItems:get(i);
if item and item:getEatType() == "Cigarettes" then
if ZombRand(100) <= chance then
itemsToRemove[i] = item
end
end
end
for k, itemToRemove in pairs(itemsToRemove) do
_container:Remove(itemToRemove)
end
itemsToRemove = {}
end
end```
like this
but that's not super important right now
if you make a clovepack as an individual item, then it always needs to be full on spawn. if it is drainable, you can remove cigs until it is empty
depending on how u wanna do it
but so far in a couple days ive learned 3d modeling, lua stuff, published two mods, learned how to properly replace functions, etc
i'm hap
but i wouldnt mind if there was a rare chance of just finding full cartons
just make it rare

nice nice
im p new to modding myself
everything i learned so far is related to traits and professions
ooo
may i ask what it is that you're working on?
or what it is you intend to try to create?
ooooooooooooooooooooooooo now i remember us talking about this. We were going back and forth on how long it should take to check the wound after bitten
cool stuff
i think my immunity mod is the only mod that currently lets players spawn as immune on a random chance
i'm gonna have to start adding notes to peoples profiles in here so i can remember who is who i swear
Unfortunately the health panel does not have proper modding support, so I will not be attempting it again until support is added for it.
pain
very pain
it's okay tho. i'd be more pain if they changed the health ui and i'd have to remake the mod
build 42 never
i'm also open to using a framework or library if someone were to make a mod that allows anyone to modify the health panel and all be compatible with each other
also if anyone actually plays this game instead of just modding, would you mind turning my mod on to see if the item distribution is okay?
I've tested it myself and it seems alright but i don't really know what i'm doing
not trying to bait subscribers i just legit want some testing help aha
lol anyone who gets into modding rarely ever returns to being a normal player
sounds decent to me
is the spawn rate based on the vanilla cigs?
maybe it should just be a recipe for the player
no i took examples from some other mods distribution lists
they should mostly be found on zombies though
-- ["list"]["inventorymale"]
table.insert(SuburbsDistributions["all"]["inventorymale"].items, "CloveCigarettes.CloveCigarettes");
table.insert(SuburbsDistributions["all"]["inventorymale"].items, 3);
-- ["list"]["inventoryfemale"]
table.insert(SuburbsDistributions["all"]["inventoryfemale"].items, "CloveCigarettes.CloveCigarettes");
table.insert(SuburbsDistributions["all"]["inventoryfemale"].items, 3);```
good good
they have the highest spawn of "3"
you can make it so they only spawn clove cigs if they are wearing black 😂
that is something i want to do
i know there's a punk outfit character
they need cloves

in that case, it might be even easier, since punks have spawn definitions
or i can check for any of the goth items from several mods I have and make it spawn if those exist
that too
so much i can do
i wish i could fast forward like a month to when i know more so i could just make the mod i want to make right now

the ideas keep coming and then eventually you cant actually keep up with them all
i wanna make a mod for call of duty zombies sodas to spawn in soda machines
hmm i don't think that should be too too difficult
that's a cool idea though
will they have significant buffs / power ups?
it depends on how i feel about balancing it probably
maybe it'll have sandbox variable effects
that's one of the next things on my to do list to learn
mod options and sandbox variables
dang i wish you could zoom in more in the game / the graphics were just a little bit better
making a makeup mod that added a bunch of different cosmetics would be cool
idk how sandbox variables work for loot tables, but you can use SandboxVars.Module.Name (something like this) to make sandbox options, with a sandbox options file
if u wanna use something as practice without any guilt, u can look at my mods as much as you want
thank you, I appreciate it
I kinda want to make a whole array of goth style mods
so i might take a look at your trait / profession framework to make a goth trait
profession framework is super easy to use
which could give night eye trait by default, no clove health damage, etc
i have an unlisted mod that uses it
havent uploaded it yet cuz i wanna use it with my friends before uploading it
and also cuz i just add a bunch of useless features on it that dont make sense together
like a Tomaro ModPack. all my mods combined into one
i get that
some of the programs ive written are just like that
a hodge podge of things that just work for me
i should probably upload a separate thing for just the occupations and traits tho
and make the modpack its own mod
oh man
i could make the goth trait give bonus damage or speed when wearing all black
why do i get filled with ideas at 1am

this is a stupid question but does anyone have a guide on properly updating your workshop mod
wdym properly update
you live on the west coast, don't you? 😏
well ive never updated a mod before.
Do i just upload the new files in the C:\Users\user\Zomboid\Workshop and steam will catch that and update it?
i don't really know how it works in general
all of your changes in Workshop\YourMod are saved when you upload. it just reuploads the entire folder
nothing fancy
lol, what city?
i'm near phoenix
yeah, desert is ugly. Just sand and dirt and barren trees
people here suck, inflation and rent increase is some of the highest in the USA atm, politics are a mess
but i came from texas which is even worse so

not much of an improvement lol
ill move somewhere north someday
that's the goal
somewhere its not so hot all the time
i feel 😔
what about you? where are u from
once in a blue moon it snows in AZ. i heard it did recently, somewhere in the desert
local locX = player:getX()
local locY = player:getY()
local locZ = player:getZ()
local playergrid = getCell():getGridSquare(getPlayer():getX(),getPlayer():getY(),getPlayer():getZ())
local setgrid = getCell():getGridSquare(x,y,z)
if playergrid == setgrid then
player:say("FIXED!")
else
local circle = getWorldMarkers():addGridSquareMarker("circle_center", "circle_only_highlight", playergrid, 0.2, 1.0, 0.2, true, 1,0.1,0,3);
--circle:remove()
end
end```
it snows sometimes up in places in the mountains
or somewhat recently we got some snow crystals. Thanks climate change
since event.add has 10 mins and every tick only
hook a function to OnPlayerUpdate and then remove it after X ticks
The question has no answer, because the world is not driven by a constant timer tick.
i don't know, it depends on framerate 😂
have a variable for like, 600
ah
and then subtract the variable by 1
if the variable is not 0 yet, just return
yea i tried this, and the game just stops
till the variable goes to 0
and exit the function
local myGlobalVariable = 600
function myTimer(player)
myGlobalVariable = myGlobalVariable - 1
if myGlobalVariable > 1 then
return
end
-- do something
Events.OnPlayerUpdate.Remove(myTimer) -- to stop this function
end
Events.OnPlayerUpdate.Add(myTimer)
here
ah
put Events.OnPlayerUpdate.Add(myTimer) somewhere in the other function you have
so it only runs when player is updating
it is simply the fastest event that triggers
but will this event run
I haven't figure out how to run by tickrate so this is my cheat
if player doesn't move
yes
OnPlayerUpdate is every few milliseconds
gotcha
like tick rate but again idk ticks
yeah the event should remove itself
oh? automatically it is removed?
more like to stop it from doing something it shouldn't lol
Events.OnPlayerUpdate.Remove(myTimer) -- to stop this function
ah yea u have that there
no, you need Events.OnPlayerUpdate.Remove(myTimer) which I added for you at the end
yeah
just pushed an update for my clove cigarettes mod
- Added a new item, " Pack of Clove Cigarettes "
- Can be opened to acquire 24 individual clove cigarettes
- The inverse is also true ; box 24 individual cloves into a pack
- Custom 3d model and texture added for pack of clove cigarettes
nice
Is their a script.txt parameter which makes things so that a food item cannot burn when it is cooked?
does anyone know what makes a modded vehicle able to tow something?
my favorite modded vehicle isn't able to tow stuff for some reason and it kills me
i wanted to see if i could make a mod just for myself so i could tow stuff with it
ive searched through vehicle files and i really can't find anything related
try looking at the vehicle parts
maybe it is missing a part that is associated with towing
yea I think you need to add attachment trailer or attachment trailerfront
if you look at the bottom of the pickuptruck_mccoy script file it has both of those so I'm assuming you need them but haven't tested myself.
hello guys i would made a mod that implement new first aids issues like cast or other thing.
And i would add a way to exp first aid with corpse autopsy but only with player corpse, do you know how i separate zombies corpses and players corpses ?
modding the health panel ui is extremely difficult, and it seems u cant make it compatible with other health panel ui mods
if u find a way to do it i'll be truly blessed
there are dif models for player and zombie corpses, which u can tell because it shows different when u pick them up
i really wanna make first aid implementations work too :(
maybe i can ask the immersive medicine creator if they found a way around it
Same idea of what was suggested, but something worth adding @open drum — if you want an exact (or near-exact) amount of time, such as 10 minutes, it's better to use a function such as getTimestampMs to compare the time
Ticks are inherently variable; N ticks will be a slightly (or vastly, depending on the machine) different amount of time on every execution
is there a way to set rotten icons for new food items? have no idea how the vanilla game does this.
i used everyhours for my immunity mod so it doesnt actually accurately portray how many hours it's been since u got bitten
but im too lazy to change that and it isnt too big of a deal imo
hmm ill take a look into that. thanks
Add Spoiled after the texture name for stale & Rotten for rotten, so Item_Apple.png → Item_AppleSpoiled.png, Item_AppleRotten.png. Food type items look for these textures. Same deal for Cooked & Overdone/Burnt
I've solved this before by chaining timed actions, rather than triggering an event. But it looks like (from later messages) you resolved the issue anyhow.
many thanks!
Took a second look. It seems like Spoiled & Rotten have the same effect & either works as the rotten texture (which is also the case for Burnt/Overdone)
Dunno what happens with stale ones, maybe just a saturation change
thats fine for me since I only want to change the icon for rotten food. also, I think vanilla icons don't differ if item fresh or stale...??
Probably my faulty memory then 😄 I thought they looked slightly "off"
That's my understanding, stale is just a name and attributes modifier, no different picture or appearance
I think i'll take the code of the splint and boost it, i would make this item effective at minimum level 5 first aid under de splint IS better.
Player are promote to level UP first aid
Tell me what are their answers
that's probably a better way than to add what u wanna add. u might even be able to change the model
but u cant change p much anything that is part of the actual health panel ui without rewriting it
they're guids, you can generate them online or get an extension for your ide to do it
@drifting stump dude u online?
You remember your vehicle shop mod
The one you did for krp server
I would like to recommend you to a client. They are looking for similar stuff
summoned
been a while
i didnt do a vehicle shop
you can probably just tell them to use server points
it has a vehicle type for buying
Only the UI perhaps?
But in the future it look like a great idea
They want the vehicle to be visible
yeah it has preview
it was improved since i took this screen
i'm trying to learn about what meta tables are right now and god damn this is confusing
you can spin it around and zoom

a table containing methods that get called when operating on the main table
i understand
just reading through this guide, the examples are difficult for me to follow
you probably wont need metatables for anything
Set = {}
function Set.new (t)
local set = {}
for _, l in ipairs(t) do set[l] = true end
return set
end
function Set.union (a,b)
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
function Set.intersection (a,b)
local res = Set.new{}
for k in pairs(a) do
res[k] = b[k]
end
return res
end```
such as this
unless youre trying to understand method inheritance in ui
yes i understand it, it just takes me a while to go through the process and actually figure out what's happening
idk
i'm dumb
theres no metatable voodoo happening there
no the metatable stuff comes right after that
that's why i was frustrated
i was struggling with the shit before the stuff that's even difficult

That code example relies on basic knowledge of set theory
anyway dipping again life been too busy
if anyone needs me ping
i have no knowledge of what a set is ngl
it also does not help that i am tired and also very stoned
lol
A set is a collection of elements without ordering or repetition (that is, the set {1, 2} is equivalent to the set {1, 1, 2})
The union operation on two sets combines their elements, and the intersection of two sets is the elements that they have in common (think Venn diagram)
e.g., for sets A = {1, 2}, B = {2, 3}, the union of A and B is {1, 2, 3} and the intersection is {2}.
that clears things up a lot for me actually
i was just fundamentally ignorant on the whole underlying idea lol
thank you very much
Update.. the client wants vehicle claim Ui similar to this. Not a shop. Sorry for the confusion
Good morning.
guys, what will be the best way to play a sound in MP so everyone can hear "boom" sound?
everyone in the region
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 5, 5, false);
this would do?
or do i have to put that code under sendclientcommand ?
good afternoon
Congrats
O hey m3ss long time
been busy at work...
but finally... only working 4 days a week 😄
and no more sql!!!!!!
YAY
Hey.
A lot of progress while you were gone.
@sour island Hey. Your community library could be templated in a command-based solution in a VSCode extension.
Thought about it last night.
I know how to do that now. =P
Templates? :V
Yeah Live Template
Would an extension that does this help your project @sour island ?
I use these for my ZedScript extension.
Below is an example of a for loop snippet for JavaScript:
// in file 'Code/User/snippets/javascript.json'
{
"For Loop": {
"prefix": ["for", "for-const"],
"body": ["for (const ${2:element} of ${1:array}) {", "\t$0", "}"],
"description": "A for loop."
}
}
it's really interesting, I also added all the Project Zomboid events in Live Templates
Did you release it publicly?
I did my own take on events in PipeWrench with callback types.
No, but I can ^^ I just have to complete the live templates because I only added the ones I used and I work on Intellij
Hmnm ok.
We can translate them to vscode too if desired.
local Execute = function (module, command, player, args)
print(command)
--local command = {};
if module == "Quest" and command == "generatormission" then
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 500, 50, false);
print("recieved code from client with "..command)
local X = player:getX();
local Y = player:getY();
local Z = player:getZ();
chunk1 = player:getChunk();
VirtualZombieManager.instance:AddBloodToMap(44, chunk1)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y-80, X, Y, 150)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y+50, X, Y, 80)
end
end
Events.OnClientCommand.Add(Execute)```
anyone help me why this isn't playing any sounds in MP?
it worked fine in single player
You guys know what mods adds custom bayonet
Cuznfor ny bayonet mod
Ill getActivatedMod()
@red tiger
Thats good to know! 😄 this was supposed to mention the progress bit not this line... my keyboard is drunk
nice nice... im delaying my new mod and mods updates for the b42... hopefuly it will take some time till i have to bash my brain and finish the new mod and improve the old ones
so the copy pasta to reply to everyone that dm's me is... "Im working on the update, but will be waiting for the b42 release so that i don't to the same thing twice in case the mod get's broken"
😄
Makes sense.
I have a clean tokenizer that I'm now applying as a vscode extension.
Templates will be a thing.
yeah, i've been focusing on the youtube integration for the mod
so working at the app...
also updated the twitch lib and will be releasing it in github in 2 or 3 weeks
I also implemented syntax highlighting for the format. =)
finished the bits handling part... it works on the mock server so it should work on the twitch api as well
ill have to stream one of these days to test it out irl
That repo you sacrificed a small forest to read is mostly done too.
ugh
so i need to kill another forest to update my reading?
i can't figure out what's wrong with the code
😄
Hahah
That's how this works.
yes and no kinda
im working on a server management "webpage"
as off now it uses mariadb to store everything and it "dumps" the data from the db to each individual file for the server config
but im wondering if maybe... i could streamline it a bit more
plus it has a server creation page which is basicly a copy pasta of the games host creation UI
but still very messy... and the code is so damn ugly... plus i ended up using php... easier but not very secure...
I'm just the oldhat modder that writes funny tools now.
xD
I don't touch that stuff now.
well... i wasnt planning in doing this... but since i made a script tool to detect server updates mod updates etc and restart the server process i ended up working on a server management "portal"
it works fine for my personal use, but since i made i might as well go all the way and make it public
so that means... simplify, improve security and make it work on windows as well
Would this mean the Lua library (from pzDoc/Capsid or your own) and zedscripts play nice in intelliJ?
Well what I'm doing atm doesn't affect users who write their scripts in IDEA.
What I'm suggesting is taking common functions and helper code blocks and templating them so modders can apply the template with their needs.
That or straight-up code insertion.
Hmm could be useful - although I'm not sure in what cases that something like intellisense wouldn't already do
All depends on what you want to do i guess.
@tame mulch Out of curiosity.. Why did you separate the definitions of Item properties in separate pages?
I thought the way that Recipe is setup was pretty nice.
Is this setup better for other reasons?
I also spotted some formatting inconsistencies. I might make a wiki account to try to edit those out.
I might also make a run through the wiki script properties if possible.
(Noting which are case-sensitive)
Added range options to my extension's API.
Considering adding auto-gen documentation to let people know.
HI al, I know I've asked a few quest9ons here in the past that were meant for #mod_support , but this question is related to mod dev. It's a question that is asked a LOT and I was just wondering if anyone was possibly working on a new towing mod since Aiteron is now a game dev and no longer updates it.
Another question I have is,.. if anyone knows if Better Towings functionality is being added to the base game or something? I would think it made sense that that would be hapening as a reason for their not updating their own mod.
I'm not trying to nag, it was a great mod when it worked. I am just wondering if more of it's functionality is being added to the base game, same as the rope towing functionality was a while ago, based on Aiteron's work.
🙂
i wouldn't be surprised if some of its features show up in b42's vehicle rework
That's going to add support for articulated trailers such as big rigs, animated bits on cars and possibly even vehicle mounted weapons, yes?
Someone was telling me about that, just earlier today.
i haven't heard about the other stuff but vehicle armour was confirmed and animated vehicles are something tis has been working on so doubtless that'll be part of it too
every time I join my test server it makes me make a new player 
Wait are you making a pz extension for vscode?
Absolutely.
The latest stable BETA version is live on the marketplace.
Damn
I'm working on adding value assistance and diagnostics support right now.
What's the name of it
ZedScript
That's gonna be really helpful to the whole modding community
Agreed.
I still need to post on the forums, requesting support for the name to become the official name along with a unique file extension so that the extension on vscode auto-loads the language.
I can't take over .txt files. That' be really bad.
It'd be better if script files ended with something like .zed
Thought I'd get a competent extension first.
I thought about this, but the timed action take multiple parameters based on numerous traits and I didn't want to make multiple scenarios and conditions
But still
That's really great
And impressive
Thanks. I'll need to broadcast its existence when I get a moment.
I built out the design of the extension in a way that provides modders the opportunity to fill in documentation from the wiki or personally.
Here is the currently-finished Recipe property set:
https://github.com/asledgehammer/ZedScript-VSCode/blob/main/src/scope/Recipe.ts
Here is the basic Item set atm:
https://github.com/asledgehammer/ZedScript-VSCode/blob/main/src/scope/Item.ts
Hi, i've updated a mod to the workshop yesterday
server cannot download the mod
but i've set it to public, and already tried to unsubscribe / restart steam and the game
what is preventing my server from downloading it ?
good sirs and ma'ams
I request thy humble assistance
sendClientCommand(player,"Quest","generatormission",args)
i sent this command from the server
which i checked it has sent correctly by putting print("sent")
checked on console that it has sent
local perform = function (module, command, player, args)
print(command)
--local command = {};
if module == "Quest" and command == "generatormission" then
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 500, 50, false);
print("recieved code from client with "..command)
local X = player:getX();
local Y = player:getY();
local Z = player:getZ();
chunk1 = player:getChunk();
VirtualZombieManager.instance:AddBloodToMap(44, chunk1)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y-80, X, Y, 150)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y+50, X, Y, 80)
end
end
Events.OnClientCommand.Add(perform)
but this won't work
print(command) is not showing up
is it cuz it's on local perform???
try hiding the mod from your local folder
you might be enabling the local version of your mod on the server
yea maybe he has same mod IDs
gonna try that, thanks
Just so i'm sure, the folders used for mods are mod and workshop from both game and cache dir ?
I forget which, but one of the commands doesn't work locally
I would presume the one to send to clients
You'd need to differentiate between MP and SP
what do you mean?
There is onServerCommand and onClientCommand
yea
one of them doesn't work in singleplayer - I think it is onClientCommand
What you can do is put the command in a "shared" function
make the command call if isServer() is true
otherwise call the contents of perform directly
so instead of calling sendClientCommand() you'd call the shared function
i thought onClientCommand is a trigger for server..
guess i was wrong
i mean listening
Listening Server Events
To listening a server event.
local Commands = {};
local onClientCommand = function(module, command, player, args)
if Commands[module] and Commands[module][command] then
Commands[module][command](player, args)
end
end
Events.OnClientCommand.Add(onClientCommand)
Listening Client Events
To listening a client event.
local Commands = {};
local onServerCommand = function(module, command, args)
if Commands[module] and Commands[module][command] then
Commands[module][command](args)
end
end
Events.OnServerCommand.Add(onServerCommand)
yea
i've deleted all local versions of my mod and still get the same error :/
i've also changed the settings to add only the mod by ID and both are the same
still confused about what was wrong with the code.. so I sent the sendclientcommand from client to trigger
onclientcommand function on serverside
which contains playworld sound and spawn zombiehorde
I checked my old code - sendServerCommand is the one that doesn't work in single player
are you saying the commands that are inside onclientcommand isn't for mp?
oh oh
but i executed that in MP
it runs on SP but not on MP
yea
hold on let me write it again
sendClientCommand(player,"Quest","generatormission",args)
that from client folder
print("Server side recieved")
local function perform(module, command, player, args)
print(command)
--local command = {};
if module == "Quest" and command == "generatormission" then
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 500, 50, false);
print("recieved code from client with "..command)
local X = player:getX();
local Y = player:getY();
local Z = player:getZ();
chunk1 = player:getChunk();
VirtualZombieManager.instance:AddBloodToMap(44, chunk1)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X+50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y-80, X, Y, 150)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X-50, Y+5, X, Y, 80)
VirtualZombieManager.instance:createHordeFromTo(X, Y+50, X, Y, 80)
end
end
Events.OnClientCommand.Add(perform)```
this from server folder
i have print("sent code") under sendclientcommand
so i saw it sending
oh
but it didn't recieve
print("server side recieved") nor print(command) is showing up on console
in MP console is split between console (players) and coop-console (host)
but you're saying it works in MP, not in SP?
that's odd
oh
i ran the code on dedicated server
did you check coop-console.txt?
listening to you, am doing that right now
STACK TRACE
-----------------------------------------
function: perform -- file: Wuro_quest_server.lua line # 12 | MOD: Wuro Quest
found error
wow
why it didn't show error in game...
the debug console only shows player-side afaik
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
host stuff is in coop-console
what's the whole error?
function: perform -- file: Wuro_quest_server.lua line # 12 | MOD: Wuro Quest
ERROR: General , 1679701750822> 139,382,088> ExceptionLogger.logException> Exception thrown java.lang.RuntimeException: attempted index: getSquare of non-table: null at KahluaThread.tableget line:1689.
ERROR: General , 1679701750822> 139,382,088> DebugLogStream.printException> Stack trace:
java.lang.RuntimeException: attempted index: getSquare of non-table: null
at se.krka.kahlua.vm.KahluaThread.tableget(KahluaThread.java:1689)
at se.krka.kahlua.vm.KahluaThread.luaMainloop(KahluaThread.java:641)
at se.krka.kahlua.vm.KahluaThread.call(KahluaThread.java:163)
at se.krka.kahlua.vm.KahluaThread.pcall(KahluaThread.java:1980)
at se.krka.kahlua.vm.KahluaThread.pcallvoid(KahluaThread.java:1812)
at se.krka.kahlua.integration.LuaCaller.pcallvoid(LuaCaller.java:66)
at se.krka.kahlua.integration.LuaCaller.protectedCallVoid(LuaCaller.java:139)
at zombie.Lua.Event.trigger(Event.java:64)
at zombie.Lua.LuaEventManager.triggerEvent(LuaEventManager.java:214)
at zombie.network.GameServer.receiveClientCommand(GameServer.java:4168)
at zombie.network.PacketTypes$PacketType.onServerPacket(PacketTypes.java:1022)
at zombie.network.GameServer.mainLoopDealWithNetData(GameServer.java:1532)
at zombie.network.GameServer.main(GameServer.java:800)```
server wouldn't have a getPlayer() return anything
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('pumpaction', getPlayer():getSquare(), 0, 500, 50, false);
getSoundManager():PlayWorldSound('bigExplosion', getPlayer():getSquare(), 0, 500, 50, false);
java.lang.RuntimeException: attempted index: getSquare of non-table: null
top of the stack trace
is the last thing ran
all of those lines are lines of code handing off the product
oh
so it's saying it ran till getsquare?
it's saying it tried to getSquare from null|nil
ah
which means getPlayer() = nul|nil
getPlayer returns the local player - but servers don't have local players - just connected ones

