#mod_development
1 messages · Page 108 of 1
FallOnFront
FallOnBehind
Ithink im not sure
Im on mobile sorry i check
But you can search xmls for the fall types
i can see left, right, stagger, trippingFromSprint
I must be looking in the wrong place >< I will look again.
Thanks everyone
That's very helpful
Update - mods that prevent rereading recipe books...
Some of Literacy skill mods, Book Consumer mod
is there deceompiled java code avible online? or will i have to go though and decompile it myself?
you'll have to decompile it yourself
i think making a decompilation public would be a breach of tos
oh I use the same
Easter egg age check.
So... am I going crazy or did it used to be that if a car was near a house like zombies it would prevent you from claiming it
Just remove zed
The xmls
Ik ow cuz thats what i used for bear trap mod
Just something I wanted to share since it has been somewhat of a problem for me:
local group = BodyLocations.getGroup("Human")
local list = getClassFieldVal(group, getClassField(group, 1))
group:getOrCreateLocation(new_location)
local new_item = list:get(list:size()-1)
print("Created new body location" .. new_item:getId())
list:remove(new_item) -- We can't use the Index, it works if we pass the item though!
local i = group:indexOf(move_to_location)
list:add(i, new_item)
end
Someone here shared a similiar piece of code to insert a Body Location inbetween other ones but it didn't actually remove the result of getOrCreateLocation, so it kinda worked but the results weren't that clean. This fixes it.
did u do it? saw exactly same code from Shurutsue 😄
Pao's attach to body code: [#mod_development message](/guild/136501320340209664/channel/232196827577974784/)
Whos that
he left from the server as ik so can't ping
@thick karma Since you were interested in my progression: https://steamcommunity.com/sharedfiles/filedetails/?id=2929712315
or changed name, can't find
Whats his mod?
no mod
I changed a line with a correction
that's the difference
Is it compatible with chucks?
Throw me a link ill read the code, but it doesn't not change vanilla.
In fact its more like extension to vanilla
ah, u found this, good, yea, I see difference
from my tests, with the original code it never deleted the inserted value with getOrCreateLocation, as I said before, and made different instances in the list of the new body location
which basically made the whole part about removing it useless
:remove() by index doesn't work? huh?
tbh I don't have any idea why, but no
lul
there's something finnicky going on with getClassFieldVal
maybe it's something about overriden methods in java that doesn't behave that nicely in lua
Nope, it uses virtual currency. My currency system is completely physical. However he (or server admins) can rotate items from my API if there is configurations for it.
btw u can check func from this, more features: https://github.com/Konijima/PZ-Community-API/blob/master/Contents/mods/CommunityAPI/media/lua/shared/BodyLocationsAPI/BodyLocationsAPIShared.lua
and it'll work only with one of those methods
but it was updated 1,5 years ago so..
@ancient grail I was able to fix it with a requestSync(), but now if I queue an transfer right after the timed action I'm using to remove the items it throws an error.
LOG : General , 1675760866509> 40,809,352> ERROR: addToItemSendBuffer parent=zombie.iso.objects.IsoThumpable@4718f822 item=zombie.inventory.types.Food@509a0605
LOG : General , 1675760866509> 40,809,352> -----------------------------------------
STACK TRACE
-----------------------------------------
Callframe at: addItemOnServer
function: transferItem -- file: ISInventoryTransferAction.lua line # 476 | Vanilla
is there a way to prevent the transfer until the buffer is ready
at least I already see bug there so need to correct a bit
I'll take a look at it, but if it uses the index I guess it's gonna have that error too
Problem with item cash is the the qty if it reaches a certain number it start to take a toll on performance
nope, exactly array item
Rather*
there's bug on 15 line with o.group, just need to remove o
coop-console.txt in folder Zomboid used only in splitscreen game or when playing host local server?
Solution is simple - don't inflate your money to millions and use money stacks is what its for.
If you want to find issue with that, you can simply get 50 boxes of nails, unpack them, place them all down and pretty much slowdown server that serves that current square.
it's the server console when doing host local, it's what I use for debugging myself
Money stacks are drainables with 100 Base.Money in it.
can't say about splitscreen but correct for host local server
@tame mulch Also sorry to mention you on the topic, but since you are here atm I would like to pinch the idea of you guys reducing the amount of simultaneous WorldModels of items in one square to some fixed value, since 5000 items on the ground simply eats up my 3060 Ti
I would make the argument for 200 <
I will talk with team about this
on our server (myself and Fallen) we had a base with a lot of crates full of a lot of materials get broken when it was overrun by zombies, and we had to turn the whitelist cleanup to minimum just to get it deleted because nobody could get near that area afterward
death zone 
yea, 2 of us tried to get close and crashed and couldn't rejoin hahaha
yea, @ancient grail I'm still not sure how to fix this one in my case.
if self.homebiogas:getContainer():getAllCategory("Food"):size() > 0 then
CBioGasSystem.instance:sendCommand(self.character,"plungeBiowaste", { { x = self.homebiogas:getX(), y = self.homebiogas:getY(), z = self.homebiogas:getZ() }})
else
self.character:Say(getText("IGUI_BioGas_ContainerEmpty"))
end
self.homebiogas:getContainer():requestSync()
ISInventoryPage.renderDirty = true
ISBaseTimedAction.perform(self);
end```
the requestSync() fixes the first issue, but introduces the new buffer issue.
what are you tring to do
remove everthing inside?
no, specific items
local waste = 0
local maxWaste = SandboxVars.BioGas.MaxBiowaste
local hbg = getLuaBioGas(args[1])
local isohbg = getIsoBioGas(hbg)
if isohbg then
if not (hbg.biowaste == maxWaste) then
local biowastecontainer = isohbg:getContainer()
local foodList = biowastecontainer:getAllCategory("Food")
if foodList:size() > 0 then
for v=1,foodList:size() do
local item = foodList:get(v-1)
if hbg.biowaste < maxWaste then
hbg.biowaste = hbg.biowaste + item:getCalories()
if item:getReplaceOnUse() then biowastecontainer:AddItem(item:getReplaceOnUse()) end
biowastecontainer:Remove(item)
end
end
if hbg.biowaste > maxWaste then
hbg.biowaste = maxWaste
end
isohbg:sendObjectChange("containers")
hbg:saveData(true)
end
end
end
end
function HBGPlungeBiowaste:perform()
if self.homebiogas:getContainer():getAllCategory("Food"):size() > 0 then
CBioGasSystem.instance:sendCommand(self.character,"plungeBiowaste", { { x = self.homebiogas:getX(), y = self.homebiogas:getY(), z = self.homebiogas:getZ() }})
else
self.character:Say(getText("IGUI_BioGas_ContainerEmpty"))
end
local item =
self.homebiogas:getContainer():requestSync()
item:getContainer():removeItemOnServer(item);
item:getContainer():DoRemoveItem(item);
ISInventoryPage.renderDirty = true
ISBaseTimedAction.perform(self);
end
@humble oriole
not sure if the request sync should come first or last
ihavent use that yet
the homebiogas is the isoObject
whats the item then
if foodList:size() > 0 then
for v=1,foodList:size() do
local item = foodList:get(v-1)
if hbg.biowaste < maxWaste then
hbg.biowaste = hbg.biowaste + item:getCalories()
if item:getReplaceOnUse() then biowastecontainer:AddItem(item:getReplaceOnUse()) end
biowastecontainer:Remove(item)
end
end```
I'm doing all the item changes on the server
local foodList = biowastecontainer:getAllCategory("Food")
if foodList:size() > 0 then
for v=1,foodList:size() do
local item = foodList:get(v-1)
if hbg.biowaste < maxWaste then
hbg.biowaste = hbg.biowaste + item:getCalories()
if item:getReplaceOnUse() then biowastecontainer:AddItem(item:getReplaceOnUse()) end
if biowastecontainer == item:getContainer() then
biowastecontainer:removeItemOnServer(item);
biowastecontainer:DoRemoveItem(item);
end
--biowastecontainer:Remove(item)
end
end
hmm, I haven't tried that with the requestSync()
Also, how do you do the context highlights with the codeblock?
idont know what you mean
@sour island if you don't mind a few words about some mod compat in DM
v
if totalSellAmt == 0 then
player:setHaloNote('Nothing to sell')
else
if getActivatedMods():contains("pz-shops-and-traders") and SandboxVars.FATM2.Wallet then
local money = InventoryItemFactory.CreateItem('Base.Money')
if money then
generateMoneyValue(money, totalSellAmt)
player:getInventory():AddItem(money)
end
else
player:getInventory():AddItems('Base.Money', totalSellAmt)
end
player:setHaloNote('Recieved: $' .. totalSellAmt)
end
context:addOption("ATM2: Sell Direct to wallet", spr, (function()
local totalSellAmt = FunctionalATMs2.getTotalItemsValue(obj:getContainer())
totalSellAmt = math.floor(totalSellAmt)
sendClientCommand("shop", "transferFunds", {
giver = nil,
give = totalSellAmt,
receiver = player:getModData().wallet_UUID,
receive = nil
})
if totalSellAmt == 0 then
player:setHaloNote('Nothing to sell')
else
player:setHaloNote('Recieved: $' .. totalSellAmt)
end
getPlayerLoot(0):refreshBackpacks()
obj:getContainer():setDrawDirty(true);
playATMsfx(player)
end))
sharing to you my compat to his mod
no thats me
my atm can convert to money or transfer directly to chucks wallet
wait so thats actual what and where, is it production code or you just made it?
oh ok
but im still having problem with refresh ithink
some not all plaeyrs doesnt refresh instantly the money is there but the visuals are buggeed
So its easy peasy my API main currency is plain Base.Money and everything (besides gems and scrap which is SECONDARY currency set) can be reversed back and forth into Base.Money
I had some thought of possible conflicts so I decided to made it as close to vanilla as possible
i still have a pull request from chuck but its working for now so ill pull and merge when someone says error
LOG : General , 1675762406158> 42,349,005> ERROR: addToItemSendBuffer parent=zombie.iso.objects.IsoThumpable@4018d47e item=zombie.inventory.types.Food@7847dff7
LOG : General , 1675762406158> 42,349,005> -----------------------------------------
STACK TRACE
-----------------------------------------
Callframe at: addItemOnServer```
still the same thing, I wonder if it's possible to hook into the item transfer and if the transfer fails then just doing a player prompt and putting it back in the player's inv
like "slow down" or something
you are probably sending it a string
and not an obj
maybe
it's vanilla, so... not sure how that's possible
then im wrong lol
it only happens if I transfer the item to the object container within like 10-15 seconds of doing the timed action, if I wait, the error doesn't happen.
Besides maybe one conflict is that you can crack open the safe your mod might be using as functional 
ATM*
poltergeist is perfect for these kinds of stuff
idont get it
If you want you can push stuff https://bitbucket.org/demellion/pzmods/src/master/ if its worth a time.
Currency mod has interactivity enabled, people can weld open safes and grab "virtual" money out of it.
It might break some immersion if somebody will crack open ATMs that is used for your Functional ATMs

i see
problem with this people report that the ownership isnt persitent
imust use global moddata but iodunno how yet
im learning it now for a diffrent mod
anyways I predicted something like that AND
Money: Wallets - Money can be found in wallets, setting max to 0 will disable this feature
Money: Cash registers - Money can be found in cash registers, setting max to 0 will disable this feature
Money: ATMs - Money can be found in ATMs, setting max to 0 will disable this feature
Money: Safes - Money can be found in safes, setting max to 0 will disable this feature
Guess what
just shut it off in sandbox vars if its messing up and gg just use whatever mod you like
nicceeee
I'll check this out today
@nova socket Out of curiosity, why disable the ability to pick up cash registers? Is it necessary for the mod to work? Doesn't seem to make a lot of sense (from the simplistic perspective of the player who wants to be able to take believable courses of action)... cash registers are easy to carry. The rest of the stuff is fair enough.
Because how people will start abusing this. Servers that will have ResetTime set to positive will encounter players that will be hoarding them in safehouses re-using them on reset. Simple solution is to keep them in places 24/7.
I'm an ex-gamdev specialized mostly on security solutions and anti-cheats.
Ahhhh... no way to stop them from resetting I'm guessing?
Well I can find out if that register is inside safehouse, but again, who told that they will not store them in some nearest house 1 square away from their safehouse.
Too much debris trying to fix it with measure, I would rather have a single countermeasure
Can you set mod data on individual item objects, rather than types?
You could add a "movedByPlayer" flag perhaps?
That's possible, but that is immediately killed by another gameplay issue. People are fucking hoarders. I made this Cant Grab This mod specifically for that case, since people tend to stash away things with that value of interests just to prevent others from looting it.
it's probably easier to store the last update time on the IsoObject ModData
Hmmm seems a bit like disabling PvP because some people are toxic PvP players...
Has nothing to do with PvP. Taking away object that can yield results turning it into a brick that does nothing specifically decreases needs for interactions, not disabling PvP
But I hear you, to each their own. I was curious what other options existed. I noticed you used a global module, which is appreciated by me because it would make patching the behavior easy enough, assuming it's possible.
It's an analogy
Is it supposed to work once? What's the logic?
I am aware your mod is not related to PvP
I mean if you want to make this optional you can push some sandbox var to completely ignore that behavior to my git
I'm saying that disabling the ability to move cash registers because some small percent of players will spitefully hide them is like disabling PvP because some small percent of players will spitefully target newbies.
It's throwing away a system because of a small percent of people who abuse it basically.
Which is understandable, but not my preferred approach in this context (though I do play without PvP, so I understand in principle that sometimes it feels worth it to ditch a system).
I would have to see how it was done. I might try to figure out if I can flag items as player-moved.
@thick karma no probs, just post it in comments or you can push it for pull request yourself.
https://bitbucket.org/demellion/pzmods/src/master/immersivecurrency/Contents/mods/immersivecurrency/media/lua/shared/ICMain.lua
line 253 you can wrap it with one sandbox option as bool
Would allowing them to disassemble stuff break anything if they want that option (aside from the obvious fact that your code probably isn't written to give them the money inside the disassembled machine)?
@nova socket
Its tied either to sprite name or custom name/group. Disassembled IsoObject is no longer an IsoObject 
So if you destroy lets say register - its just goner, not gonna be used ever again.
I'm not sure if I see your point.
I think most people expect stuff to be gone forever if they disassemble it.
(Unless perhaps there is a recipe for the object.)
You don't disassemble objects in my mod to get results. You check them and timestamp them until ResetTime is passed
Unless ResetTime is -1 so its never gonna happen
If I got your question right.
Yeah, I understand disassembly would only give vanilla components of disassembling the item... I'm just wondering if you expect it would break anything if someone did that.
Like, say I disassemble a safe (by changing that setting in your mod) . . . Yay, I now have safe components. Did I break your mod?
Or does your mod say, "Oh, well, one less safe in the world."
(I suspect some private players who do not have any concern for horders / cheaters because they play with friends who are normal human beings will want to disassemble stuff freely if possible, hence my question.)
(These security measures are priceless for public servers, but my friends are not trolls.)
No, you didn't break anything. You can disassemble all safes in the world you just not gonna get money out of them. Its not that peculiar issue, since there are several pool of income with endless generation based on how you approach it.
Great.
You can earn money by solely smacking hundreds of zombos and selling scrap or trading it.
I am gonna add a sandbox option for that, too, even though maybe only 5% of players will ever want it.
I am one of them probably.
By "selling" I mean if you have any sort of shop, which I intend to create
Your mod should be compatible with the vanilla player-to-player trade menu since you used items, which is nice.
Not like you need mine shop either
Players can just anarchistically demand money in the trade window.
There is apparently a bunch of mods that use Base.Money the same way.
Although actually I dunno
I think you can't put stacks...
I guess if you rubber-band money into single items it could work?
For sure. Yeah I guess it would be hard to use trade window for money-based trading
Would need an expansion
Money Stack was solely a solution of immersion and carry capacity.
Absolutely
Also you get -3 unhappiness by making one stack 
local pl = getPlayer()
pl:setBumpType("stagger");
pl:setVariable("BumpDone", true)
pl:setVariable("BumpFall", false);
pl:setVariable("BumpFallType", "pushedBehind"); --pl:setBumpFallType("FallForward");
pl:reportEvent("wasBumped");
figured it out yet?
Ohhh
You mean it makes you happy to stack money?
lmao I see.
yep
At first I was thinking it was a hassle and would make you unhappy, I got ya now.
Does it give you +3 unhappiness to unstack your money?
nope
Seems like a highly exploitable issue?
But you can't unstack the whole stack in one click
Just play with your money and all your happiness comes back?
Sort of. But waste a bit of your time, or you can smoke (everyone is smokers in this game) with the same value. Or read a book or do some sort of profession trait like with More Traits.
Note that counting money is timed action and will be slowed as you are deeply depressed making it a bit painful to count.
Same as with how people level reloading skills by juggling M9 mag in and out.
I hear you, but this one sort of makes a lot of sense.
I mean, practicing reloading should in fact increase your reload skill
Pointlessly counting money only makes crazy people happy.
But I hear you that it is not without precedent in Zomboid
Smokers have to at least consume goods for their happiness, as well.
So that analogy is somewhat fair but imperfect
But it is like reading books over and over.
Oh man, like people solely have thousands of cigs
I only seen few servers where they actually cared about cig amount
It's not so bad, I just wanted to be sure it had crossed your mind.
I mean, I made a mod where you can meditate you're happiness back, so I'm not complaining
Just talking.
I mean if you want an option for that too I don't mind either 
Wrapping with one bool is sorta 5 minutes deal
Totally, I'm not really stressed about it, but I'm sure some people will be.
Just because I know how people are.
For sure. I try to tailor my mods to a lot of different people who often want nothing like what I want lmao so I'm just throwing out ideas, so hopefully you won't take them as complaints. Mod looks great so far.
@nova socket You aware of this error?
ERROR: General , 1675770500508> ExceptionLogger.logException> Exception thrown java.lang.RuntimeException: unknown block type "//" at CustomSandboxOptions.parse line:107.
ERROR: General , 1675770500509> DebugLogStream.printException> Stack trace:
java.lang.RuntimeException: unknown block type "//"
at zombie.sandbox.CustomSandboxOptions.parse(CustomSandboxOptions.java:107)
at zombie.sandbox.CustomSandboxOptions.readFile(CustomSandboxOptions.java:72)
at zombie.sandbox.CustomSandboxOptions.init(CustomSandboxOptions.java:42)
at zombie.GameWindow.init(GameWindow.java:1203)
at zombie.GameWindow.mainThreadInit(GameWindow.java:576)
at zombie.GameWindow.mainThread(GameWindow.java:489)
at java.base/java.lang.Thread.run(Unknown Source)
@nova socket It was caused by the Java-style comments in your sandbox options.
Will include the fix in the PR
You'll wanna find a better place for this:
// Move to traders mod
// option ICurrency.SilverJunkCost = {
// type = integer,
// default = 1,
// min = 0,
// max = 100,
// page = ImmersiveCurrency,
// translation = ICurrency_SilverJunkCost,
// valueTranslation = ICurrency_SilverJunkCost,
// }
// option ICurrency.GoldJunkCost = {
// type = integer,
// default = 2,
// min = 0,
// max = 100,
// page = ImmersiveCurrency,
// translation = ICurrency_GoldJunkCost,
// valueTranslation = ICurrency_GoldJunkCost,
// }
// option ICurrency.GemsJunkCost = {
// type = integer,
// default = 3,
// min = 0,
// max = 100,
// page = ImmersiveCurrency,
// translation = ICurrency_GemsJunkCost,
// valueTranslation = ICurrency_GemsJunkCost,
// }
Or use /* */
Also someone asked about DMs, and sure but chances are I won't see them cause of discords new DM stacking
Someone worked with Prop1, Prop2 parameters in recipes?
Me
What they mean?
Whatsup ?
The item character is holding
Source=1 can be the first line
2 second line
Useful if the item is from tags so its undefined
🫡
Prop1 = Right Hand Item
Another question - what time used for time in recipes? Ticks, game time, etc?
I don't know but if I had to wildly guess I would imagine it's ticks... Do people finish recipes faster at different game speeds? I'm not even sure.
I think it's gameTicks * Performance (FPS) coeff
It's the same ticks as timed actions - so I'd wager they're synced in MP somehow
Thanks for the pro-tip.
if u right then strange to link craft time and fps 
Anyone know whether Disassemble is ever an option on ATMs or cash registers? I'm guessing no? And can anyone give me the coords for a bank vault? Not sure where to find one... 😭
Anyone knows the base attack speed of "Bat", "Heavy", "Stab" and "Spear" weapon animations ?
Not sure but you can use timed actions to respond to their animEvents
So no one has measured it yet ?
Cause right now I'm relying on Trombonaught's values but I don't think they're very accurate
I mean I don't know about that logic... I am not everyone and you asked 3 minutes ago.
But I do not know the measurement. 🙂
But I do know you can do
function YourTimedAction:animEvent(parameterName, parameterValue)
if parameterName == "AttackAnim" and parameterValue == "FALSE" then
-- The attack animation has reached its set ending timepoint.
end
end
Also written:
function YourTimedAction:animEvent(event, parameter)
if event == "AttackAnim" and parameter == "FALSE" then
-- The attack animation has reached its set ending timepoint.
end
end
Ok that's helpful, thanks !
Good luck!
By the way, if you are ever making your own XML for a custom animation, you can rename those events freely. So you take the timed event where it sends AttackAnim with FALSE and make it send AttackComplete with anything really, and just use
if event == "AttackComplete" then
-- Same deal
end
But vanilla animations use AttackAnim with TRUE when the attack starts, and AttackAnim with FALSE when it ends.
@jovial harness
I see, I'm not making my own anims, I'm just trying to display accurate information
kinda like that
for a "weapon modifier' mod I was working on
Oh, I see! Cool!
Does that require an overwrite of anything or can you just send those colors to the tooltip string?
I'm using ISToolTipInv:render() so... it's gonna conflict with anything that messes with that
Okay, I figured you were. I can help you with compatibility on that.
why can be conflict? u don't calling original render func?
I mean I do call the render after renaming it "old_render" but that's it
You'll likely want to consider something like what Chuck's Named Lit does for its override if you are not affecting all conceivable items:
NLISUI.ISToolTipInv.render = ISToolTipInv.render
function ISToolTipInv:render()
if not ISContextMenu.instance or not ISContextMenu.instance.visibleCheck then
local itemObj = self.item
if namedLit.StackableTypes[itemObj:getFullType()] then
local bookNameLitInfo = itemObj:getModData()["namedLit"]
if bookNameLitInfo then
end
else
NLISUI.ISToolTipInv.render(self)
end
end
end
This calls the original render if it's not an item with custom data
Oh so you stick it on the end?
Do you just append your data to the end of the render function that exists when you load the game?
and old_render(self)
at the end of my custom render
I'm heavily inspired by the mod "Show Weapon Stats" for the tooltips.
I see, so you do your stuff first. Can I see how your render looks?
You wanna see my 270 lines render ? you sure?
I can upload files here ?
Yep
You can see line 134 I'm checking the SwingAnim and basing attack speed out of it. Hence my original question
And those values are Trombonaught values
if it's not a loop (no continue statement) better do like that 🥺
function ISToolTipInv:render()
if ISContextMenu.instance and ISContextMenu.instance.visibleCheck then
return
end
...
end
This looks like it should be compatible with NamedLit and Wookiee Gamepad Support due to line 40.
No idea what those are, but good
I actually agree, I think Chuck copied it from vanilla style.
Not my mod, not my primary concern.
Pretty cool mods that a lot of people will want to use that do tooltip stuff.
Let me look them up real quick
u can put in on top of render instead 183 and 298 lines cos it's will called anyway
NL adds special tooltips for books. WGS fixes the tooltip positions for people running large font sizes on gamepad. Also allows horizontal tooltip projection.
vanilla 
Named Lit is one of my favorite mods so I added WGS support to make its tooltip positions match WGS.
(Optionally, of course.)
That's good then. Thanks for the feedback guys
btw @jovial harness why are u creating new setHeight and drawRectBorder functions in render process?
u can create it outside of render function scope
If you want to send me a working WIP I'll compatibility test it before you release.
I like your mod and I expect my friends may want it on my server
Looks nice.
(I know it sounds nitpicky and I am not saying this for me because I actually like the look just fine, but a lighter purple might be easier to read on black . . . but you know to each their own.)
Good to know, I'll set it outside of the function
So, anyone tried changing the swingsound in the code before?
And about the colors. There's actually different colors according to rarity
and light purple is supposed to be epic rarity. I'll tweak it to be lighter so it's more readable
@jovial harness Extracted, setHeight would look like this:
local stage = 1
local old_y = 0
local lineSpacing = self.tooltip:getLineSpacing()
local old_setHeight = self.setHeight
function ISToolTipInv:setHeight(num, ...)
if stage == 1 then
stage = 2
old_y = num
num = num + numRows * lineSpacing
else
stage = -1 --error
end
return old_setHeight(self, num, ...)
end
Hopefully you can solve the other one based on that
I'd throw them above render because even though it's not strictly necessary based on pattern of execution the local copy of old_setHeight is used in render.
ISToolTipInv:setHeight passes self automatically.
All right. TIme to refacto some things then ! thanks for the advices!
Also, tbh, food for thought, I would wrap all of my wandering locals in a module, but that's just me
You mean put them all in a table or set them in IsToolTipInv constructor as part of the object ?
E.g., using find and replace, I would refactor this:
local old_render = ISToolTipInv.render
local item = nil
local numRows = 0
local modifier = nil
local modifierName = ""
local fullItemName = ""
local modifierColors = {1, 1, 1}
local modifier = {}
local damageText = nil
local rangeText = nil
local hitText = nil
local critText = nil
local condText = nil
local breakText = nil
local accText = nil
local gunText = nil
local weaponText = "TET"
local soundRadiusText = nil
local pushBackText = nil
local speedText = nil
local category = nil
local old_render = ISToolTipInv.render
like this:
local WMT = {}
WMT.numRows = 0
WMT.modifierName = ""
WMT.fullItemName = ""
WMT.weaponText = "TET"
WMT.item = nil
WMT.modifier = nil
WMT.damageText = nil
WMT.rangeText = nil
WMT.hitText = nil
WMT.critText = nil
WMT.condText = nil
WMT.breakText = nil
WMT.accText = nil
WMT.gunText = nil
WMT.soundRadiusText = nil
WMT.pushBackText = nil
WMT.speedText = nil
WMT.category = nil
WMT.modifierColors = {1, 1, 1}
WMT.modifier = {}
WMT.ISToolTipInv = {}
WMT.ISToolTipInv.render = ISToolTipInv.render
table then, got it
Then, at the bottom (last line of your file), you can do return WMT and other modders can play with stuff if necessary by require "[yourfilename]"
Ah I see. Good stuff
Notice I changed old_render to WMT.ISToolTipInv.render.... this will require 1 extra line of code to work (it's in the example above, too):
WMT.ISToolTipInv = {}
That declares the fake ISToolTipInv table (inside your module) in which you'll store the old copies of all the ISToolTipInv stuff you want to overwrite.
Then everything you override will read almost identically to vanilla
Yeah so you really store everything that was local then
I'll have to do that for More Description For Traits, too. It doesn't use modules
why include the function copies?
Wdym?
putting old_render into the module
i'm just curious if there's a specific use for that
Just in case someone wants to slightly modify your approach, it may be useful for them to be able to get a copy of the function before your mod edited it.
Just to make a patch mod easier on the next person.
oh, i guess you could use that to insert code between the vanilla function and the modded one
i'll consider moving some of mine into the modules
I do everything I can to make life easier on whoever has to pick up my code when I inevitably move on with my life lmao
if he will use it only in single file then no need to create module with variables
I'm sure someday there will be other games and other modding to do
There is no need for him to do it. There may be value to future modders who want to patch his work.
It's still a local and the performance difference would be absolutely trivial
Measure it and let me know lmao
(if it can be measured)
(it may be too negligible)
Micro-optimization matters less to me than mod compatibility, but obviously this is subjective.
I don't think there will mod that will change nil variables
Clearly all modders must do what is right in their own hearts.
Lmao I honestly didn't notice all the nil variables because I just did a Find and Replace on their code.
@jovial harness You really don't need to declare these variables nil. They're nil by default.
me too just saw
Omg so many lol
but it's fine cos otherwise he will localize it in different scope and will can't use it
it was necessary for scope when they were locals
Really? Why?
goddammit. This is why I didn't want to share my file haha 😂
Ohhhh I see
Because in Lua it allows him to just start using the variable later to go var = nil
I got you now.
there's single scope, so fine
yeah, it doesn't matter when using a module though
local WMT = {}
WMT.numRows = 0
WMT.modifierName = ""
WMT.fullItemName = ""
WMT.modifierColors = {1, 1, 1}
WMT.modifier = {}
WMT.weaponText = "TET"
WMT.ISToolTipInv = {}
WMT.ISToolTipInv.render = ISToolTipInv.render
@jovial harness
Would be the new top of your code with the unnecessary nil variables gone.
i'd argue it can also be good for organisation to 'declare' nil variables but i don't think i would do it myself
@jovial harness btw instead this
if swingAnim == "Bat" then
swingAnimSpeed = 1
elseif swingAnim == "Heavy" then
swingAnimSpeed = 0.6
elseif swingAnim == "Stab" or swingAnim == "Spear" then
swingAnimSpeed = 1.13
else
swingAnimSpeed = 1
end
yeah ?
I hear you but yeah I don't like the look of unnecessary declarations.
But totally there's validity to that
(Maybe grouping your nil variables in a block would make some sense, on that note. If you keep them.)
u can precreate table
local swingAimToSpeed = {
["Bat"] = 1,
["Heavy"] = 0.6,
["Stab"] = 1.13,
["Spear"] = 1.13,
}
aaah yes good trick.
swingAnimSpeed = swingAimToSpeed[item:getSwingAnim()] or 1
then just select the index, yeah

I might as well make it part of the module, too
@jovial harness Or, in module form:
WMT.swingAimToSpeed = {
["Bat"] = 1,
["Heavy"] = 0.6,
["Stab"] = 1.13,
["Spear"] = 1.13,
}
yep
with this part same thing
(also, you should really tab those because those are in their own scope)
Bruh I'm getting slaughtered with all your corrections right now lmao
But it's great to learn !
Hello guys
local statsRange = {
-- here's all stats as from last my example ("accuracy", "sound radius" and etc)
}
local statsMelee = {
-- here's all stats as from last my example ("endurance cost", "attack speed" and etc)
}
-- 221 line
elseif statsRange[k] and not item:isRanged() or statsMelee [k] and item:isRanged() then break
What wizardry is this senpai
@jovial harness I noticed you declared old_render twice... fixed that in my example above and reorganized declarations by type while I was at it.
Ah yes I used that trick for More Loot Settings. Bear with me, this "Weapon Modifiers" mod is something I started last year and I abandoned half way through so there are some things I'm surprised about too.
Thanks for pointing that out !
u r welcome 
By the way @jovial harness, when you find and replace, remember to match case and whole word to minimize errors:
otherwise you could have stuff like modifierName -> WMT.modifierName and then replace modifier and wind up with WMT.modifierName -> WMT.WMT.modifierName
Which is clearly undesirable
And a real possible example from your code.
Hmm, that option isn't displayed in my vscode
The ab?
Match Whole Word
The Aa? 
oh yeah that's just the tooltip! thanks
No Aa is match case
then Item will be replaced too 
Without it
Yes
If you do not select match case, you'll replace both item and Item simultaneously.
better use both always with replacing actions
Exactly.

What is this?
looks like cookie or pizza mb
A pizza ?
Hell yes
lol I am making a tutorial mod and the trait is "Party Animal" 😛
I am horrible at pixel art but I did something recognizable so I won a round.
with name will be easier 
It looks good but wait to see it in the character creator
sometimes it doesn't end up as you want it
😭
speaking from experience lol. But maybe I'm just terrible at pixel art myself !
Maybe cut a slice of that pizza
btw good idea, piece of pizza will be better
and some wine glass or beer right beside it. or a party hat ? Maybe that's overkill
it's a POOKIE
lol
It's a 16 pixel by 16 pixel image
A party hat alone is hard to distinguish
That looks better
I made toppings twice as large and made pizza fill the whole 16x16 instead of stopping before the edge.
For one of my traits I used one of the inventory images of the game (32 x 32) and scaled it down to 16x16 and added a +
oh that looks good
Fair enough
This one is great
Thickened the crust, but I think I also need to lighten the brown for better visibility on black...
Could you make a drop of cheese drip from it ? 🤤
Yes but how compellingly I do not know
It may just look like a different object instead of drippy cheese lol
But I'll give it a shot
Think I'm likely to go with this:
Best visibility yet in normal view:
Tooltip lol.
What does it do ?
lol not much yet. Probably just going to make it say silly crap once an hour as an example of how to use modulo arithmetic to loop through an array since so many modders seem to have never seen that before.
including me !
local example = {
[1] = "Bob",
[2] = "Joe",
[3] = "Sue"
}
local exampleIndex = 1
local examples = 0
while examples < 100 do
print(example[exampleIndex])
exampleIndex = (exampleIndex % #example) + 1
examples = examples + 1
end
@jovial harness
Oh, so it goes back to 1 after 3 then
(In 0-indexed arrays, you would do next = (next + 1) % #example).
for what this mutant? xd
ah, btw about next, I remember as I tried to use it but got nil error, there's no next in kahlua? 🥴
Ummm yeah in retrospect maybe next is a bad variable name because actually it gets colorized funny in VS Code @jovial harness
Changed it to exampleIndex to be on the safe side.
I use modulo loops like this for Position Breakdown a lot, when looping through its various settings.
Not my vscode. Do you have the lua extension ?
I use Lua, StyLua and Luacheck
I'm using garry's mod lua 
Author on Lua? 4 plug-ins with the same name. Oof. @jovial harness
burryaga, why are u using that instead of a random number ?
its just to say messages right
@jaunty swan I would use a random number if it were a real mod.
oh okay nvm then ! 🙂
I am purely going to do the loop because my mod is an example mod for people to learn with
wouldnt a for loop be better then
I'm using Lua by sumneko, StyLua by JohnyMorganz and Luacheck by rog2.
@jaunty swan And I often see:
next = next + 1
if next > #example then
next = 1
end
And I just want to die.
So this needs to be taught lmao
Random in PZ is implemented in a very concerning way.
for i = 10,1,-1
do
print(i)
end
Everything uses a high-quality PRNG.
Nano or ms?
ms
Yes
either is fine really
then u have a random number
divide it by a certain amount and round it
I'll grab the API call
im completely unfamiliar with pz modding to be clear
just experienced in programming
getTimestamp()
No worries. I mod the game's engine to have more control over modding it.
I also use Typescript in place of Lua so I can have more structure in my mods.
lua is my first language i ever learned, i think i stick to it for that reason tbh haha
when it comes to modding gmaes
games*
that or c#
Functional programming is a desirable skill. Learn OOP when you get time to. It'll diversify your problem-solving.
i have hehe
i did a full course
but u can make your own OOP system in lua
if u want to
with require
and making external lua files
You'll learn more about how you think about solving problems when you give yourself a project that you want to work on.
=)
im actually working on a mvc web app for a friends mc server
im looking for a job as junior .net dev right now
A Marvel vs Capcom Web App, why would anyone want such a thing?
</sarcasm>
Thanks, I'll be here all week.
MAYBE...
xddd
if anyone needs their own web app, it's spiderman.
True, true.
@jaunty marten Let me know when you do take a look at that mod loader experiment. Curious to know your thoughts on it.
It could be improved to send byte data for files if desired.
not way, mb today will test
just right for my current mod
loading in specific order
Ok no problem. I don't expect anything.. Curious about what others think of the work.
Heh, that's clever -- the vanilla code for inventory containers loops through functions recursively
It was a bitch and a half to get locked out containers for my shops to work right
Ooooof.
How do I get the color-blind variables 'good' highlight color & 'bad' highlight color ? I can't seem to find them in the files
Still thinking about how I'd get the patch mod to load last
So anyone using it properly will be fine if they require as needed
But other mods get shafted
wait 1 tick? or what do u want
Hmm that could be a good idea
I started a community patch mod to go along with frameworks and debugtools
But I'm thinking how best to have it loaded
Overwriting to be first would be ideal for some cases
But for the most part loading last would also overwrite bad actors
Haven't really sat down with the concept yet
Perhaps loading first is better now that I think about it
A community mod library should include tick-registration alongside a timer library.
Less event handles on the Java side.
I need a good time library
You can add an Event function to the stack during the event, that way your event function is last.
Events.OnGameBoot.Add(function()
OnPostBoot()
end)
end
Events.OnGameBoot.Add(firstBoot)```
This basically guarantees that the `OnPostBoot` function will run last during the `Boot` event. Can use something similar to ensure any patches run last.
u can take mine
while those are nice, I dont need timers. I need a way to get teh current IRL time, add time to it in seconds.
is it will be called twices? huh?
stuff like that.
didn't get u 😄
well os.time doesn't seem to work the way it SHOULD.
What? On game boot it would first call firstBoot() which adds OnPostBoot() to the Boot Event stack, it then calls OnPostBoot(). nothing would be called twice....
i tried that and it is never the right time.
there's two OnGameBoot no onpostboot
right.
Lunch break. BBL.
I don't think there's going to be a silver bullet - might have to just document everything and go with what works for each scenario
OnPostBoot() is your own function. you are just adding it to the Boot event stack once during the boot event....
ah, it calling even the world loaded AND literally game started
this event name..
it's don't sync with time zone
i mean i add 1000 seconds to it and it adds 3 minutes,.
how did u figure out it?
it can't, os.time just returns the num
0 + 1000 can't be 180 
aaaaaaaaaaaaaaaaaand welcome to my issue!
i'd be interested in seeing that code also that gets you that
how did u format the number to time?
Oh that, ya, thats absolete will remove it
Cool.
Are you sure safes / vaults / cash registers / ATMs can be disassembled in vanilla? @nova socket
I have not yet had a chance to check but I tried disassembling them all with your mod running (after I removed the command to remove disassembly) and none of them were offering that option.
Moving stuff worked fine.
Registers and Vaults yes.
local adjDelivery = os.time() + adjTime1;```
I'll check again
@jovial harness Drippy cheese?
yum
Or not obvious enough that it's pizza?
I think it's pretty obvious
For comparison:
u want to say if I run it will be this??
-- os.time = 3000
local adjTime1 = 360 --math.floor(adjDist) * 60
local adjDelivery = os.time() + adjTime1;
=> adjDelivery = 3180

drippy cheese ftw
i want it to add the distance in tiles to the current time (1 tile per second driving is good right?)
Left is better
Thanks, Discord Previews.
Nice job.
Pretty unanimous that people like drippy cheese, got it.
idk about if it's good cos idk for what u will use it he-he
(I double-voted to show the options.)
trucking mod.. i want to taek the distance bwtween picup and delivery points in tiles, add that to the current time, and make that the delivery time.
no need options, first is winner, voting is declared closed. 
maybe add 10-15% to the tiles for a little buffer etc.
idk what's the problem cos it's literally cannot happen, 5 + 10 = 15 but no way is 8 XD
local adjTime1 = 360 --math.floor(adjDist) * 60
local adjDelivery = os.time() + adjTime1;
local readjDelivery = os.date("%B %d %Y, %I:%M %p", adjDelivery);
that's how i do it. and it's never right
os.date exists? lol
YUP
Me when os.clock my beloved doesn't exist in Kahlua
yea, sadly no clock 
I haven't asked this modding channel directly but since the voting is almost closed, I'm gonna ask once: how many trait points do y'all think Darkvision should cost on servers that allow it? https://steamcommunity.com/sharedfiles/filedetails/?id=2916589393
@thick karma ```Lua
option ICurrency.DoProtect = {
type = boolean,
default = true,
page = ImmersiveCurrency,
translation = ICurrency_DoProtect,
valueTranslation = ICurrency_DoProtect,
}
option ICurrency.GiveMood = {
type = boolean,
default = true,
page = ImmersiveCurrency,
translation = ICurrency_GiveMood,
valueTranslation = ICurrency_GiveMood,
}
Tweaked, options are now effective
I don't know how possible this is, but it'd be neat if it worked off of sandbox settings.
Lower light values at night = higher cost
I haven't poked around with traits yet so forgive me if this isn't possible.
test this format %H:%M:%S
only in cheat mode 
light like there's day not late night
should cost 8 points at least, it seems op
I want human in-game ide 
I want PipeWrench to have fully-functioning TS for PZ's Lua codebase
Haha. What I'm doing right now will help that HTML engine.
Not possible unfortunately.
Why do something twice when you can do it right the first time?
Haha, totally I understand some people will feel that way.
The mod is not for every server.
just hours minutes seconds?
do u will restrict access for some servers? 
ha-ha
yea, just for test
I mean not every server will want it. It's not restricted
it reads correctly though?
I could however add brightness limits that host could set.
yep
I don't think you can even restrict anything, since all mod code is open-source anyways.
You can copy and paste it in workshop again.
You can make the mod private.
There's a few fun ways you can restrict code.
I mean they will still read the mod data
Oh with mod data? Yeah you could make it annoying to access.
Yes, if you give the wrong person access, they can still get your mod even if it is private. But, in theory, if your mod is private and you only play with trusted players, you can keep it that way.
What you wanna tell me somebody really obfuscates the mod code? 
@jaunty marten Knows what I'm talking about.
obfuscated code 
No, I mean you make the Steam Workshop Item private.
So no one can find it unless you give them access.
I mean what Jab said specifically
Ohhhh
If you can make it so that the only way for the mod to work is to upload a workshop item, then you can DCMA them out of orbit.
u can even do web loading for mod
Only if fed through the server to client.
Wasn't sockets or any sort of fetch not an option for PZ Lua?
yh
Would you have a point recommendation IF it had sandbox settings for a max brightness?
Hm..
never used exactly in pz, but there's mods with content from web like twitch extension so there's
I wanna say 6~7 with sandbox option.
does anyone know where the file/files where dismantling data is stored? like when you dismantle an electronic thing with a screw driver? where is all that laid out? tagged on the indiviual item? in some file somewhere?
Cool sounds good.
You can HTTP POST if you set java.awt.headless=false on the JVM args when launching PZ and using openUrl(..).
No GET though.
That'll open a browser window.
then how twitch extensions works?
Heck if I know. I only know how my Twitch patch mod works.
custom java?
Yes.
I use an RCON mod along with a Generic command that feeds into a Lua command registry.
seems right, just checked m3ss mod
no i meani t reads out the tiume and date fine, it just wont let me add or subtract froim it correctly.
My stuff's in-house.

u need to format it each time lol
oh you mean that. That one is using 3rd-party app with socket, that's what author confirmed.
where is the data on crafting recipies stored?
yeah, u can ask @pulsar heath about it
I know, we've been discussing that with him 
Yo, when will we get openUrl() fixed so I can add a button to join my Discord server from in-game? :D
Sad that we disabled open web links) I had cool rick roll mod 😄
Ooooh, started working on guide about item script params
It will be long night...
Was it purposely disabled?
Do want. I plan to add a GUI solution for mapping and defining items.
I think yes

Allow us to use sockets on servers so I don't have script everything with bash outside.
Thanks for clarifying. Are there plans to re-enable it? (Possibly with a dialog box prompting the user to open it or not?) (Whitelist domains?)
like discord.gg for discord invites? :D
Maybe. Write suggestion on TIS forum, we will discuss about it later
I'll draft a proposal. Thanks.
Thank you for helpping us modders sir 🫡
enable it in the name of rick roll 
BTW where do I go to appeal a ban on the forums?
Ask Spiffo
u get banned? 
❤️
In 2016 yeah lol
Forums 
Off-topic for in here. =)

I thought mb u get banned by million threads about new features for game 
Jab probably transpiled his text way to something different than TS back in 2016
Hahaha no it was silly MP drama.
u killed developer in mp?
I kill players in PvE servers all the time.
toxec
@dark wedge Hows your mod coming along?
That's a yup.
Planned on copying ScriptItem's list of params into a GUI editor interpreting it in JSON and exporting it to the game's text format.
Here WIP article about scripts. Done on 40%, not translated - https://pzwiki.net/wiki/Scripts_guide
Thanks. I'll refer to your work while making this editor.
It's coming. lol. I still need to tweak a few things, optimize how i'm gathering objects to hit (this can be slow currently), and write a function to calculate damage as it doesn't take into account your skills and such right now for attacks. I got sidetracked with the whole unarmed thing a bit, but now there's an uppercut you can do as part of it. I'm currently using the base game's Base.BareHands item so the range is a bit off, but this shows me actually unarmed attacking.
interesting, so they are timed actions but with no run/walk flags
do you apply damage like to closest zed?
Yup. I used a TimedAction so that the animation is synced for MP and I don't have to fuss with any of that. And yes, I apply damage to the closest zed as long as they are in range of the attack.
Wondering if an animation sync API would be in the works eventually.
It would be so nice to have animation variables set on players just sync with each other automatically...
We have sync, but it depends on State. Player params sync depends on State (Like TimedActionState, EmoteState, FishingState)
why is there items.txt and newitems.txt? are the items jsut arbitraily split up in there? or do the 2 docs reprisent diffrent things?
Classic party movie or partying-oriented quotes, all of you, go! 🤪 (It's for my mod, it's on topic . . .)
see the distance? that's in tiles. tell me how the start and due are that many seconds parat.
when i add that distance to the start time in seconds.
Yea I noticed this. But even then its not perfect as the action variables are synced, but not variables set on the player. Additionally, you can't sync numbers with a TimedAction, only strings and bools. So speeds and stuff have to by synced outside of the TimedAction, unless I'm missing something....
due is exactly current time?
You can convert number from string
start time is the time I click accept job.
due time should be that time PLUS the distance in seconds
5874 seconds is NOT 3 minutes.
why do u need it in due? what the failure then?
show the actual code
i dd?
started = os.time.
due = ```
local adjTime1 = math.floor(adjDist)*60
local adjDelivery = os.time() + adjTime1;
failure = adjtime *2
I mean full code
it aint all together like that.
cos don't see any problem here
neither do I! and THAT is the issue.
You can convert number from string
u can send all files to dm, I will check as will back to pc, rn chilling in da bed 
can't get up.. xp
Looking good. Can't wait to get my hands on this and the duel wielding. Are they gonna be part of the same mod or something seperate?
Modders, is the pz animation engine hard to work with?
The unarmed stuff will be included with the offhand attacking mod, but will have sandbox options to disable it if people don't want it.
nice
Right on man, this is my most anticipated mod right now, cant wait to try it out.
So I apologize in advance if I hit you up for updates from time to time. xD
right there with you. This'll be a must have until it is part of the main game
No worries! If all goes well, it shouldn't be too much longer. 🙂
there is a link to in-development guide?
@tame mulch are you planning to continue npc mod? can i help you?
I stopped working on the NPC mod
I'm sure your busy with working on the actual game but any chance that better towing and lockpicking might someday get an update to fix them?
Maybe in this month on weekends I will fix them (after finish modding guide)
Do you need an native English-speaking translator for docs / guides?
Will be very cool if English native speaker will check my guides for mistakes
(After I finish them). English is not my native lang, so I think will be some spelling problems in my guides.
I think your guide was in mainly Russian?
I've worked with some friends who had game manuals that I translated. (I don't speak Russian; I can fix very broken English)
Will be cool if you will help with broken English. I will write here when my guides will be finished.
Would be very glad to help. This is my love for modding the game. <3
Your doing the lords work right now and everyone appreciates it. Ill help out in anyway I can as well.
Want to give back to the game that gave me so much
so the proper way for me to edit items needed for recipe using sandbox var is to use OnCanPerform? then i just make a function for it and use scriptmanager to assign the value of needed amounts per item and should be able to use sandboxvar in it from there?
why does it say english but its on a diffrent language
WIP. I write in my main lang
Translation is coming
then translate
also why cant we use lua to edit every param.. only doparam works and that edits everything
will we be able to edit it for specific instance without changing everything
What problem with DoParam?
doparam chagnes everything that will spawn in the future
You mean change script for 1 item instance?
Scripts used for spawn items. For change item instance values used another funcs
Since Ramiro#0112 can't speak in here (Issues registering phone # to talk here), I'll ask for them. What do you guys do to handle importing .x models for Blender?
Check out gunas' DirectX importer (.x), should be easily found online on github via "oguna".
Martin, our modeller, owns and uses professional software that allows him to easily use .x files.
I don't think we even use Blender internally.
What program is it?
yes like setName, setMaxRange
I dunno, I'm sure he'll reply to me eventually 
but not everything can be set
Im curious because I use professional expensive software aswell and it cant read .x files at all
If you could find out that would be really appreciated
I mean, something has to use it since the format exists and it's not something Martin made from scratch?
What version of Blender does it work in?
This info is useful to many.
It's updated frequently so 3.0+ I'm pretty sure
I figured, Ive shopped around but couldnt find anything to read it. Id be interested in seeing what that program could offer me.
The modder in question had Python errors. It could be them installing it wrong but being sure.
It is the alin exporter plugin for 3ds max, can't quite remember the website address. It's free but you pay a $100 for a commercial license.
What version do you use specifically so I can pass that?
Huh, thought he was more posh than that.
lol
Perfect 3ds max is already what I use
Blender is finicky with version control.
Checked right now, the latest version is made for Blender 3.4, there's a download guide on his github.
Ill do some more digging, thanks a bunch.
i uise autodesk maya
Thanks
For convert .x models to .fbx you can use this: https://imagetostl.com/convert/file/x/to/fbx
But not work with anims
I hate blender, Ive tried so many times but cant seem to adapt to it.
Used Blender since 2.4
Oldhat here.
Since the days of that big bunny animation.
Buck I think was his name.
Same. Big Buck Bunny was a classic. 😄
Its specifically for anims, that I want it for. Fragmotion gives me an aneurism when I use it.
blender can export .fbx which PZ can use.
I think only way now = use fbx anim guid in steam and if need - recreate default anims
I currently am stuck using fragMotion to make edits to animations. It sucks so much......
For making your own from scratch, you can use Blender.
(Runs off and rewrites IO plugins for Blender)
BTW I found out that my old PZ IO scripts are in a Blender archive.
I was messing around with it when a the .fbx character model was released and got mixed results at the time. Id have to try it again when I get a moment.
Someone also copied my old scripts. (Thanks!) https://github.com/rundaaa/ZomboidImportExport
I spent way to long using framotion for something that would have taken me 1/4th the time regularly.
a real Art Vandelay kind of mod
It's nice to see that the community has since made their own scripts / solutions since mine.
I feel like a dinosaur lol.
Mine dealt with the oldest format for models in PZ.
yup. i have spent literal hours moving Bip01_Prop{1,2} to the correct location for various animations I have done. 
There was an issue I always ran into where id move something and it would fuck up the entire animation.
You spent so much time fighting against it.
Is something like a new or alternative solution to I/O needed for Blender users here?
I would throw some money at someone who updated/made a blender plugin to properly import/export .x (with animations).
Bet
If people ping me about doing it then yeah I can make it a high-priority item to work on.
I simply work on what's at the top of my stack of things to do.
I tried do this with assimp lib (game use this lib for import .x, .fbx, .txt models/anims) on python, but stopped because was some problems)
Is there a specific reason/error/txt modded items won't show up in-game? or could it be any error & does the debug ItemsList show modded items?
Item list shows all items- if your items aren't showing you may not have activated the mod on the save in particular or there's a typo in the script
Can someone tell me the version of the .x file format used for PZ?
I'm going to write this down.
It's a singleplayer save, would I need to make a new save for the item to be on the list?
I've just enabled the mod in main menu
You have to go to the [load save] screen
Then select [more]
And edit the mods there
It's possible that I could even debug the default .X import / exporters for Blender.
Just need to know the version of .x used and maybe a couple other things.
I see, thanks.
Trying to wrap up this update for EHE so I can tackle the community patch
Not enough free time with this "needs a job to live" stuff
xof 0303txt 0032
Is the header. So .x version 3.3, in text format.
Fantasic. Storing that on my Discord.
There's a limit to WorldDictionary?
Did anyone here already know you could make Say text bigger by using curly quotes???
I wish that PZ supported true markdown.
# header
>>> Note: This is good syntax
Also, I wish that we could pass AngelCodeFont as an alternative to UIFont enum. That limits what can already be done in the internal API to Lua users immediately, also through ISUI/UIElement.lua...
Big sad.
Will be writing a custom font implementation sometime in the near future.
I think say accepts uifont. as a parameter
Sorry, SayShout* and other Say variants that lack that parameter.
I had no idea I could make SayShout text larger through something so easy
Feels like witchcraft
Who would think to type curly quotes in a programming IDE?
Try do this by custom TextDrawObject.new()
is there any inbuilt way for a recipie to specify any item that is holding water?
I was doing all kinds of freaky stuff with text drawing.
With my UI shader API, text can become way freaky.
What is this? Is this a mod? An upcoming feature?
The future
Code from my old mod (Project Humanoid)
This code also can draw moodles. I think possible create custom Say with custom font (if do font by images)
I'd like to see UIClock and UIMoodles moved to Lua eventually. =(
I think write API for add custom moodles
Moodles has been a difficult thing to adapt over the years.
Yeah.
(Is in a candy store for API atm)
In my client core mod, I'm also adding drawCircle(angleStart, angleStop) for partial-circle and circle UI components.
Rounded edges to windows?
🤤
Do beveled edges Battle Star Galactica style
I think in future UI for game will be A LOT better 😉
Oh heck yea.
You guys planning to add shaders in like I'm hacking it right now?
I can't say details what we want to do
If shaders and caching render frames for UI elements are both implemented, UI will be epic.
Haha I love the suspense on that actually.
I think a lot of time is wasted on the CPU and GPU for the current UI API though. Cache those draws as textures. Epic win if done.
Static window stuff etc.
22 from 335 params done 🥲
Don't give up. I believe in you!! (Also I need this info lol)
@sour island Should we pin this somewhere?
https://steamcommunity.com/sharedfiles/filedetails/?id=2929985581
Its a gold mine\
I remember having to translate the LuaEvents wiki for all 200ish events to PipeWrench-Events plugin.
I unfortunately know this pain haha
The effort is worth it though Aiteron
Remember that people will reference it for many years!
@dark wedge What's the current common Blender version people use right now in PZ? (for LTS for things like plugins)
Gamepad support? 🥺
https://www.youtube.com/watch?v=0fI5GExxb8k just for show, simple PNJ Quest
PNJ QUEST SYSTEM FOR THE 10YL SERVER - Discord : https://discord.gg/4CwHTXjq8Q
I wonder if the .x format has the same matrix handedness that Blender has..
Models looks cool!
I think you can try use assimp lib. Maybe you will have better luck with it)
My issue with the original import export scripts I wrote back in 2014/2015 were that Blender uses a different matrix handedness than the format so I solved it by copying JOML's code from Java and not using the matrix class provided with Blender.
Theres a zoom in mod that works really well
yeah !
and it gives interest to the mirror, players can take beautiful pictures of their survivor they love
if you set them as vegetation they'll move a little in the wind. also, i MIGHT recommend faking them a shadow?
One of my biggest issues last year was I found at 1440p I couldn't zoom in close enough. I toyed with idea of making a mod for it but ultimately didn't have the time to attempt it. So happy someone else did it when I returned this year.
Thanks for the tips Skizot !
and because of the unconventional way you install it I can use it in MP servers
np 🙂
My mood now:
is it possible to override item scripts via lua? in runtime, or game event?
like add menu option to edit weight capacity of an container
solved: #mod_development message
aiteron pretty sure you can say what the plans are at least vaguely
in a blog post its already been mentioned theyre moving to a ui middleware
If UI is getting looked at, Please break up functions as much as possible and return multiple things - it would help jumping in for modding
no specific one was mentioned but im guessing either gameface or noesis
i.e. after a UI does something return itself, and parts that can't be referenced
Hey, sorry. Currently am afk so my responses will be a bit delayed.
afaik though, there are no plugins or anything that are used for .x animations and such for Blender that currently work, and so the latest version is just recommended/used. The .blend files that are available making your own from scratch definitely works in the latest version, so no need to use a specific version currently.
most likely modding for uis will become xml docs to generate the interface
with lua callbacks for logic
It's a good idea to select a LTS version for software such as Blender.
I might pick one and then say I'm writing for that version for a time.
3.3 is currently LTS, which I use right now. would agree to aim for an LTS version if you made a plugin of course, and would personally recommend/request that version.
what's a middleware? in the last blog?
I'll simply use 3.3 and then accept it as the current standard version for the PZ modding community at large.
If anyone asks, simply point them to this version. =)
Sounds good to me. 3.3 is LTS until next year, and I think its also the version you get if you grab it from Steam.
(Initiates roundtable of modelers)
I still grab from blender.org. <3
I used to have blender bumper stickers on my car and a keychain loop.
Oh, same. I got one of those shirts when they did the big UI re-factor a few years back. I've gained the "Obese" trait since then, unfortunately, so it no longer fits. hahaa
... When you know you've played PZ too much.
They still haven't patched the weight system for IRL's MP server.
BTW reminds me of the convo I've had several times of how human models should flex for height, weight and other factors.. to diversify the zed crowd.
(Prays that B42 has this feature in secret)
One can dream. 
any one have experience with setting fog colors?
better to just ask the question you want to ask
might be helpful.. i hope
tables
_G,scripts,vanilla traits,permission,lua events,WearClothingAnimations = {},getWorld():getAllTilesName(),getScriptManager():getAllModelScripts(),getBeardStylesInstance():getAllStyles(),getHairStylesInstance():getAllFemaleStyles(),getHairStylesInstance():getAllMaleStyles(),getScriptManager...
Can you send me this image?
Just thought I'd share this with everyone. Comes in handy when working with the OnKeyPressed event:
mmmm LWJGL keyboard.
here
i am setting fog colours using setAdminValue for color_new_fog however only the red value is changed ingame not sure if im missing something
Light theme in IDE
lol notepad++
Theres a dark theme for note++
Also the 2 threads contains most resources. Of atleast what i could gather that is
U might not have notice it yet
❤️
53 from 300+ params done

Getting back into coding this year I was rocking Notepad++ for a good while until I stopped being lazy and reinstalled VS
But that non dark mode notepad++ is gross looking
usually vscode is my go to
VSCode is my choice rn.
Used to use Sublime Text because of the dark theme it has by default.
5k symbols already in guide (-_-)



