#mod_development
1 messages ยท Page 73 of 1
A delay in update tracking can also be attributed to steam
Yeah, an hour long delay though?
Workshop's wack, I guess.
Just added a vote restart command as a workaround if it's being slow
ยฏ_(ใ)_/ยฏ
I know a guy who has scripts - doesn't seem to have any delay
I can give him your discord# if you want
have you attempted using udderly updates? it's about as smooth as it gets for workshop checking and auto restarting. has fail safes to prevent duping and inv loss also by sending clients back to title screen 15 seconds before save. then saves and restarts the server.
udderly updates?
uses workshop polling feature which is probably way better than whatever call the discorebot is using
I'm using the new vanilla command to check for updates
i rebuilt this also using the open source code and some of evelyns additions, but her version works perfectly to my knowledge
i just needed something to auto restart the server on a regular basis on top of that since we dont get mod updates often
the only part you'd need is if you are running a ded server, to update the .bat file so it auto reruns the bat when it's quit
just add :start to the beginning of your .bat file, first line
and add goto start at the end. will always auto restart when the quit command is used
pretty much only time it wont auto restart actually is if you hard close the command window
i use it in tandem with windows scheduler to make sure it restarts every 6 hours, or 6 hours after the last restart.
Does anyone know what might be causing the two pixel wide line to appear on the south facing poster?
is anyone in contact with Brita? i'm trying to reach to them to see if it's okay if i release a patch for Brita weapons that adds all weapons to the display category Wepfire
Does anyone have experience adding "custom" context options to clothing? Think the "Hood Up," "Hood Down" options for hoodies; exact same functionality, just with custom text (in this case I'm trying to "Hike Up" or "Let Out" a skirt). I've added the options to the ContextMenu file, but in-game it's showing the key, not the value: "ContextMenu_HikeUp," instead of "Hike Up."
I know that I could use the ItemTweaker API but I'd rather not add dependencies just for this if possible. There's got to be a way to do this vanilla, but every mod I've checked that ostensibly offers this functionality also seems to have the same problem.
remove the space, its probably why its messing it up
There's no space except in the text defined in ContextMenu, in the clothing script it calls HikeUp and LetOut respectively and in ContextMenu it's defined as ContextMenu_HikeUp and ContextMenu_LetOut respectively.
The translation file probably says ContextMenu_Hike Up = "Hike Up" get rid of the space in the ID
When the game can't find the translation it returns the string given
if it has a space then you're giving it that ID
But it doesn't: ContextMenu_HikeUp = "Hike Up",
Ah fuck, that's my typo in the Discord message then
Had a line break there in Discord and didn't spot it
let me show an example of what to do
item HairBow
{
DisplayCategory = Clothing,
Type = Clothing,
DisplayName = HairBow,
ClothingItem = HairBows,
ClothingItemExtra = Base.HairBows_UP,
ClothingItemExtraOption = WearHigher,
IconsForTexture = BowBlue;BowPurple;BowRed;BowPink,
BodyLocation = Necklace,
CanHaveHoles = false,
Weight = 0.05,
WorldStaticModel = WorldItem_HairBow,
}
Let me remove my ExtraSubmenu and see if that does anything.
I remove that tag as a personal preference
I may be missing something obvious but as far as I can tell I've got it all set up properly. Wholly possible I am just staring at a typo though.
{
DisplayCategory = Clothing,
Type = Clothing,
DisplayName = School Skirt,
ClothingItem = SchoolUniform_Skirt,
BodyLocation = Skirt,
Icon = SchoolUniformSkirt,
BloodLocation = ShortsShort,
ClothingItemExtra = SchoolUniform_SkirtMini,
ClothingItemExtraOption = HikeUp,
ClothingExtraSubmenu = LetOut,
Insulation = 0.1,
WindResistance = 0.01,
FabricType = Cotton,
WorldStaticModel = Skirt_Short_Ground,
}```
ContextMenu_HikeUp = "Hike Up",
ContextMenu_LetOut = "Let Out",
}```
Where's your translation file located / what is it named?
This should work, seems to me like the game is gaslighting you, so check if you are subscribed to your own mod, if you are modding in the correct directory, and completely reboot the game. And yes, make sure your translation files are in the correct area.
Oh fuck, this might be it, I had it directly in /Translate and not Translate/EN
that would be it
That fixed it.
Thanks, guys. I hope you enjoyed this little foray into stupidity with me.
everyone goes through this, don't worry
I even explained it to my rubber duck!
In software engineering, rubber duck debugging (or rubberducking) is a method of debugging code by articulating a problem in spoken or written natural language. The name is a reference to a story in the book The Pragmatic Programmer in which a programmer would carry around a rubber duck and debug their code by forcing themselves to explain it, l...
helps when the rubber ducks respond
too new
Ahh
my journal update is going p well
managed to make it update old journals accordingly
working on updating reading/tooltip to match
also
sandbox option for how the old style worked
hello all.
hello im trying to learn the basics, such as how to add a new item in a mod. I tried creating just copy of a garbage bag, but with different name simply to learn this process, but keep getting the following error. Anyone know what this means?
Is there another site like this " https://zomboid-javadoc.com/41.65/" with information on lua, project zomboid, & general place to start when modding. (i've sucessfully rewritten noodle legs but but if there are any more websites to help me understand whats possible to change & do in PZ that would be sick
https://projectzomboid.com/modding/ is a more up to date version of that site
package index
I both love and hate that Co' made those identical lol
This isn't actually showing the error, it's showing where in the code the error occurred. If you open up the console or the console.txt file you should see the actual error message
Someone please create a mod that makes alcohol effects last much longer!!!
Why not you
Oh I see, thanks ill look there
Please, how can i save and relaod a variable pointing to a specific bag. when i reload game or create new player after death, the variable is empty in my script ?
i create my var like this :
tbag=player:getInventory():AddItem("TBoT.Bag_TBoT")
After that i can add item like this:
tbag:getInventory():AddItem("Base.Pistol")
I don't think you can save references
you could check if they have one of those bags and set the variable to that
if they don't have a bag you can spawn one and then set it
there is only One bag in my world like that, how i could check . Can you tell me the command ?
you won't be able to access it if it's not in a loaded area
the playerinventory is an itemContainer (I get the class names mixed up) but they have a bunch of getItem(s) methods
I'm not even sure why the tbag variable here is needed to be honest
because i use the bag like a shop. i made a Mod which interact witch a bot on twitch. When viewer send specific command on twitch i interact in PZ
so the player has to go back to this specific bag?
yes
and there's only one in the world?
i choose a bag because on the first load, the player (the streamer) put it where he want
yes only one
what happens if, like Albion says, the bag isn't loaded?
for the moment, i m not in face of this probleme. I don t know how testing the presence of the bag in loaded area
the twitch script can store item... and send to the bag when the player is near (this is the concept for the moment. ) ..
player:getInventory():getItemFromTypeRecurse("TBoT.Bag_TBoT")
this command give me the bag if in the local area ?
if it's in the player's inventory
tracking an item that can be anywhere isn't really all that feasible
you're better off updating it's contents when the player picks it up
or interacts with it
you can try to detect when it's being loaded and unloaded, but it seems like a hassle
when the player pick it up... interesting...
you made a mod whith shop i see. How can you store the item in the shop when player go away ?
I don't have actual items in the shop
it's just tables/lists
I recommend you add items to globalData
when the player interacts with the bag - pull the data from there, spawn items, clear the list
excellent !!!
you could use playerModData but it wouldn't carry over when they die
Thank you for the idea ! Thx @sour island and @bronze yoke
you give me a new point of view on my work... i try that
no problem, I forget what the game design term/principle is called, but basically don't try to 'simulate' everything -- focus on the end result, the rest can be smoke and mirrors / deception
question time.
local objects = square:getMovingObjects() I am doing this to get the vehicles in a square, and it works. but the moving object getId() is DIFFERENT that than the VEHICLE:getId() how do i get the vehicles id from the moving object id.
heh
if you print that movingObject and basevehicle, you get the same entity?
BaseVehicle does indeed have a getID() that returns the vehicleID field
movingObjects have their getID that returns object's field of 'ID'
they don't inherit or interact
i see that lol.
local objects = square:getMovingObjects()
for index = 0, objects:size() - 1 do
local obj = objects:get(index)
if obj:getObjectName() == "Vehicle" then
print("Vehicle found! name: " .. obj:getObjectName() .. " - ID: " .. obj:getID())
if obj:getID() == pMod.TrailerId then
print("vehicle has the same id as players trailer: " .. pMod.job)
return true
end
end
end
that's my goal.
you can pull field data directly
--TODO: Figure out how to get this to work outside of debug
for i = 0, getNumClassFields(zombie) - 1 do
---@type Field
local javaField = getClassField(zombie, i)
if javaField then
if luautils.stringEnds(tostring(javaField), '.' .. "speedType") then
print("-EHE:SWH: javaField: "..tostring(javaField))
if not javaField.setInt then
print("-EHE:SWH: setZombieSpeed: ERROR: javaField.setInt not found.")
return
else
javaField:setInt(zombie,speedVal)
end
end
end
end
can't set tho, also this is junk code from my github history - not usable as is
I was gonna say.
and i dont want to set it, just wanna verify it against the one i stuff in the players mod data.
alternative: use
public String getAuthorizationDescription() {
return String.format("vid:%s(%d) pid:(%d) auth=%s static=%b active=%b", this.scriptName, this.VehicleID, this.netPlayerId, this.netPlayerAuthorization.name(), this.isStatic, this.isActive);
}
and string manipulate to get the ID
uhhhh.....k
local function cutMyClassIntoPieces(object,fieldID)
for i = 0, getNumClassFields(object) - 1 do
local javaField = getClassField(object, i)
if javaField and luautils.stringEnds(tostring(javaField), '.' .. fieldID) then
print("-javaField: "..tostring(javaField)..tostring(javaField:get(object)))
return javaField:get(object)
end
end
end
nice name
local ID = tonumber(vehicle:getAuthorizationDescription():match("%((.*)%) pid:%("))
should probably confirm the string's return before trying to force tonumber
incase the field stuff doesn't work
the fieldID you need is 'VehicleID' btw
is there a specific size that the preview image for mods should be?
Like, the basic one that just shows up in game
512 for game, 256 for workshop
grrrr
for i=0,square:getMovingObjects():size()-1 do
if instanceof(square:getMovingObjects():get(i), "BaseVehicle") then
print("Will this work? ID: " .. square:getMovingObjects():get(i):getID())
end
end
``` so this is a LOT cleaner for getting the base id's.
that gets vehicleID?
did you have any luck with either method?
also
local sqObjects = square:getMovingObjects()
for i=0,sqObjects:size()-1 do
local vehicle = sqObjects:get(i)
if vehicle and instanceof(vehicle, "BaseVehicle") then
local vID = tonumber(vehicle:getAuthorizationDescription():match("%((.*)%) pid:%("))
print("Will this work? ID:" .. vehicle:getID().." vID:"..vID)
end
end```
while probably not a big deal, it is good form to not make repeated calls if you don't have to
lol probably not.
try that for the vehicle ID
okay
any idea how to add a inventory page with a exact copy of main inventory?
i have this```
local private = {}
private.refreshBackpacks = ISInventoryPage.refreshBackpacks
function refreshBackpacks()
private.refreshBackpacks(self)
end
I think this line of code is what makes the inventory work
local private = {}
private.refreshBackpacks = ISInventoryPage.refreshBackpacks
function ISInventoryPage:refreshBackpacks()
private.refreshBackpacks(self)
end
Probably not an answer, but I noticed you didn't overwrite ISInventoryPage . refreshBackpacks
I need a isoMovingObjects():BaseVehicle():getID(); LOL
is not with :?
vehicles can have modData, anon said
In this case yes, it's with : but in general you use what ever matches vanilla.
you're adding the wrong ID if you're using getID on the vehicles
because getMOddata on a vheicle causes hell because the vehicle HAS no moddata
wait, getID() doesn't return the same number?
that's the trailer id on the rgiht in my img
was that set in that session, or an earlier one
I have a feeling objectIDs don't get saved
it's probably a reference ID on load
same
Have you tried using modData?
what happens?
heh, I accidentally created a new feature
I can store XP into journals but reading them doesn't give me the XP as gained for transcribing
it says getmoddata is nil
and aitreron said that there is no vehicle modata which is why it doesn;'t show in AUD
?
i use it also
mr albion
it's an isoObject - although that doesnt stop zombies from not saving theirs
remember the function you came up with to overwrite base game traits
my bad
local altNames = {}
altNames.Gardener = getTextOrNull('UI_trait_GardenerMarked');
local old_addTrait = TraitFactory.addTrait
function TraitFactory.addTrait(type, name, ...)
name = altNames[type] or name
return old_addTrait(type, name, ...)
end```
this one
How can I tweak it to overwrite more values?
aka for example i want to make trait not profession-specific, or hide some trait from character selection
would I have to provide all fields then?
albion writes to vehicle modData and I write to modData on installed vehicle parts, both work fine
you can provide more fields, i used ... because i wasn't sure how exactly it would interact with variable numbers of arguments
All the bodies of my characters during testing
Got another report of fileReader failing and bricking someone's server
"/lua/EasyConfigChuckedServerConfigs/servertest_config"
"/lua/EasyConfigChuckedServerConfigs/servertest-Copy_config"
The folders exist on his machine and include the config files inside with appropriate names, but the folder name is /Lua/ obviously.
Still not sure what's causing it.
MURDER THEM ALL!

: java.nio.file.NoSuchFileException: /lua/EasyConfigChuckedServerConfigs/servertest-Copy_config
: at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.deleteFile(Unknown Source)
: at jdk.zipfs/jdk.nio.zipfs.ZipPath.delete(Unknown Source)
: at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.delete(Unknown Source)
: at java.base/java.nio.file.Files.delete(Unknown Source)
: at zombie.core.logger.ZipLogs.deleteDirectory(ZipLogs.java:305)
: at zombie.core.logger.ZipLogs.addDirToZipLua(ZipLogs.java:264)
: at zombie.core.logger.ZipLogs.addZipFile(ZipLogs.java:80)
: at zombie.network.CoopMaster.launchServer(CoopMaster.java:164)
: at zombie.network.CoopMaster.launchServer(CoopMaster.java:88)
: at zombie.network.CoopMaster$1.call(CoopMaster.java:396)
: at se.krka.kahlua.vm.KahluaThread.callJava(KahluaThread.java:182)
: at se.krka.kahlua.vm.KahluaThread.luaMainloop(KahluaThread.java:1007)
: 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.pcallBoolean(KahluaThread.java:1924)
: at se.krka.kahlua.integration.LuaCaller.protectedCallBoolean(LuaCaller.java:104)
: at zombie.ui.UIElement.onMouseUp(UIElement.java:1228)
: at zombie.ui.UIElement.onMouseUp(UIElement.java:1183)
: at zombie.ui.UIElement.onMouseUp(UIElement.java:1183)
: at zombie.ui.UIManager.update(UIManager.java:816)
: at zombie.GameWindow.logic(GameWindow.java:262)
: at zombie.core.profiling.AbstractPerformanceProfileProbe.invokeAndMeasure(AbstractPerformanceProfileProbe.java:71)
: at zombie.GameWindow.frameStep(GameWindow.java:765)
: at zombie.GameWindow.run_ez(GameWindow.java:681)
: at zombie.GameWindow.mainThread(GameWindow.java:495)
: at java.base/java.lang.Thread.run(Unknown Source)
Any Java heads know what is happening here, on a technical level?
Does it usually have a leading slash ? I'm no Java head by any means but that part seems odd
I assume the bottom is the first stack? and its read upwards to the exception?
Quick (easy?) question -- what format are the colors in HairOutfitDefinitions? They're set as decimals, like 0.98,0.87,0, but don't seem to map to common color-coding methods.
0 - 1 == 0 - 255
This is right from the console log - save some edits cause discord's message limit
Aha, so it's like Defold!
Only seems to happen sometimes - refuses to let them boot up the server even with the mods removed.
The last part is the concerning bit
I don't think the fact the lua is capitalized matters - but I do find it weird the exception stops at the folder outermost to the file
Could the issue be I'm using too many folders?
Going to ask the user to send me his zomboid cache
Kind of confused why delete is being called ๐ค
Based on the stack trace and a quick peek at the code, it seems like ZipLogs creates a new file system object while creating the zip, and deletes the lua directory before re-creating it (as a sanity check, I suppose)
I'm not sure why this is being called from onMouseUp, though
I believe this occurs when they hit to launch the server
From the Host option?
Yes, they're hosting from the main menu
Ohh, that makes sense
Not sure what to do when the error occurs even when my mods aren't installed.
Asked the guy to manually delete the files and it fixed the issue.
๐คทโโ๏ธ Another can kicked down the road I suppose
Based on '/lua/' I'm assuming it is trying to delete '/Lua/' and can't rectify it
Nothing else in the string is lowercased - but I'm still wondering why it was flagged to be deleted ๐ค
and why it was so insistent
I could drop the folders entirely and write into a file right in Lua
I suppose that should fix the issue(??)
hmmmmmmmm
apparently it IS setting the mod data of the trailer.
but i don't know how to GETthat trailer and check it's mod data still.
FFFFFFFFFFFFFFF
I thought you got all the vehicles in the area?
i get all the moving objects.
and you can tell which are vehicles? and trailers are vehicles? and can have modData?
I don't see how you can't find the vehicle you want?
If this is clientside you can pull a list of all the loaded vehicles and loop through it. Or if whatever you're doing relies on you interacting with the vehicle you can get the vehicles in a particular cell you click on, lots of options
I've just spent like 30 minutes trying to figure out that nil ~= false
so, I think we're in the same boat

haha it can be quite hard to explain to people that nil is false but not equal to false
Anon, I need to know if a certain vehicle with a certain moddata is within 10 tiles of a certain tile.'
that is "the goal"
The sad part is I know that, I set it to ==false and changed something else which made it nil - cause before I had 'not X'
basically moving to many parts to get this done
You can generate a uniqueID of your own to inject into the modData
if you can get the nearby vehicles fine you can just parse for that one
already have
you know which vehicle you're looking for ahead of time, or do you only know the area you're searching?
theorhetically i know both.
the player and the vehicle are both branded (moddata) with the same code.
i just need to make surte the vehicle is in range of the tile when the player turns it in.
so the vehicle is marked, but you don't have its ID on hand, is that right?
Is the code large?
huh?
To post here
which part would you like?
local function openboard()
local player = getPlayer();
local myModData = player:getModData();
if (myModData.job == nil) then --If we have nothing stored in this modData then we place the microfilm and then fill in the modData
OTR_UI:close();
locallistUI:close();
JobsUI:open();
elseif (myModData.job ~= nil) then --If we have something in the modData then we just print console stuff and end
if (myModData.city == tcityName) then
if findTrailer() then
-- get trailer and remove and show ui and shit.
player:Say("turning in job! " .. myModData.job);
JobCompleteUI:open();
TimerUI:close();
myModData.job = nil
else
player:Say("UH OH! my trailer isn't close enough to deliver! ");
end
else
player:Say("I'm on a job going to " .. myModData.city);
end
end
end
function findTrailer()
--detect the obj with sprite named wew
local player = getPlayer()
local pMod = player:getModData()
local cell = player:getCell()
local x, y, z = player:getX(), player:getY(), player:getZ()
local xx, yy, zz
for xx = -15, 15 do
for yy = -15, 15 do
local square = cell:getGridSquare(x + xx, y + yy, z)
if square then
local sqObjects = square:getObjects()
for i=0,sqObjects:size()-1 do
local vehicle = sqObjects:get(i)
if vehicle and instanceof(vehicle, "BaseVehicle") then
local vID = tonumber(vehicle:getAuthorizationDescription():match("%((.*)%) pid:%("))
print("Will this work? ID:" .. vehicle:getID().." vID:"..vID)
end
end
--[[ local objects = square:getMovingObjects()
for index = 0, objects:size() - 1 do
local obj = objects:get(index)
if obj:getObjectName() == "Vehicle" then
print("Vehicle found! name: " .. obj:getObjectName() .. " - ID: " .. obj:getID())
if obj:getID() == pMod.TrailerId then
print("vehicle has the same id as players trailer: " .. pMod.job)
return true
end
end
end ]]
end
end
end
end
i know you're gonna ask.
oh
see the commented code?
that's what i HAD but the id's weren't matching up.
hence our convo earlier;.
when you set trailer ID were you using vID as well?
square:getVehicleContainer() will help you out a lot here
doesn't that just get the trunk?
nope, returns a BaseVehicle
you can't assume anything based on it's function name
could have been around since cars were just wrecks
hence referring to them as containers
that doesnt solve the issue though
is your trailer ID the object:getID or the vehicleID
also were we able to confirm either is consistent?
well it had moddata attached (i hope)
if you store a temporary value there's no way to compare it later
Commands.KYRPT.spawnTrailer = function(player, args)
local pX, pY, pZ = args.x, args.y, args.z
local serverFixAngle = args.dir
local gCode = args.code;
local sq = getCell():getGridSquare(pX, pY, pZ)
local car = addVehicleDebug(args.type, args.dir, nil, sq)
local carModData = car:getModData();
carModData.job = args.gCode;
local carid = car:getID()
car:transmitModData()
sendServerCommand("KYRPT", "getTrailer", {trailer = carid, code = gCode});
local FixAngle = IsoDirectionsToAngles[serverFixAngle] or 0
car:setAngles(180.0, FixAngle, 180.0)
--Clear out part inventories of random items that spawn in when we spawn vehicles in.
if args.clear then
for i = 0, car:getPartCount() -1
do
local part = car:getPartByIndex(i)
local container = part:getItemContainer()
if container then
if container:getItems():size() ~= 0 then
container:removeAllItems()
end
end
end
end
if (type(args.condition) == "number") then
for i = 0, car:getPartCount() -1
do
local part = car:getPartByIndex(i)
if part:getCondition() > 0 then
part:setCondition(args.condition)
end
end
end
end
But it should work within the same session
you're comparing vehicleID in one code to getID() in another
local carid = car:getID()
local carid = tonumber(car:getAuthorizationDescription():match("%((.*)%) pid:%("))
But, I don't know if objectID or vehicleID are constant
getId and getID don't return the same thing, lol, getId is the one that is specific to the vehicle, and its still no good because it can change between loads
wait are they spelled differently
getSqlId is the only one that is consistent across loads and server vs client, but there is no way that I know of to retrieve a vehicle by that Id, so you have to search through vehicles and check each's sqlID
I'll be damned
does moddata stay though?
ya for sure
well i have mod data on the trailer (i guess i have NO way to tell and AUD doesn't show me.)
but if you're applying the moddata on the client I'm pretty sure you have to manually sync it with the server
it's set on the server.
that last block of code is the server command to sapwn the car.
Any modders that could help me with a little script for my new video? ๐ ๐
then you may need to run a command when you interact with the board
to ask the server to check it's side
i trasmit it though
but if you're hosting/SP I don't think the modData's would mnismatch
I was mistaken regarding transmit
?
i looked up examples of square:getVehicleContainer
local vehicle = square:getVehicleContainer() == "Is there a vehicle in this square"
well ya, if it returns a vehicle then there must be a vehicle, lol
?
empty table.
it was added and transmitted ๐ฆ
server.lua```lua
local car = addVehicleDebug(args.type, args.dir, nil, sq)
local carModData = car:getModData();
carModData.job = args.gCode;
car:transmitModData()
client.lu```lua
function findTrailer()
--detect the obj with sprite named wew
local player = getPlayer()
local pMod = player:getModData()
local cell = player:getCell()
local x, y, z = player:getX(), player:getY(), player:getZ()
local xx, yy, zz
for xx = -15, 15 do
for yy = -15, 15 do
local square = cell:getGridSquare(x + xx, y + yy, z)
if square then
local vehicle = square:getVehicleContainer()
if vehicle ~= nil then
print("and we got a car...")
local vMod = vehicle:getModData()
print(vMod.job)
if vMod.job == pMod.job then
print("oh jesus we found it!")
return true
end
end
end
end
end
end
vmod.job is nil.
shouldn't it be vmod.gCode.job?
?
you didn't put a job key into the moddata on the server in the snippet
so why would there be a job key on the client?
carModData.job = args.gCode;
ah, whoops
it gets all the cards... but returns NADA for the mod data.
so either args.gCode is nil, or transmitModData doesn't work, although chuck seemed to just check the latter and it worked
it sets it on the player when it sets it on the trailer.
i wish someone would update AUD to work with vehicle mod data lol.
nah, didn't check - but the conversation I had was regarding transmitting condition of parts
now you see hy my brain... is pudding.
this is on SP?
MP, it's for a RP server.
your testing this on MP?
.....yes?
try it in SP
if it works fine - as it should given you're dealing with the same modData with nothing to transmit - then the issue is with transmitting
what you can do is change the sign interaction to happen on the serverside
this could solve a few issues as the text can now appear for all players ๐คทโโ๏ธ
that being said, not being able to transmitModData is weird
you could also try to set all the modData on the client's side
given it's a mission type system - other players don't really need to know that info
this is also why I've been putting off fixing EHE's networking issue
okay. i think i know what to do ... lemme rewrite some crap.
stick with it, you're like 90% there
I also need to stick with it, journals and XP math suck ass
Commands.KYRPT.getTrailer = function(args)
print("it Fired and vehicle");
local square = args.tloc;
local gCode = args.code;
local vehicle = square:getVehicleContainer();
local vMod = vehicle:getModData();
vMod.job = gCode;
end
``` client side command sent from the server when the server creates the trailer.
sendServerCommand("KYRPT", "getTrailer", {tloc = sq, code = gCode});
wait wait... wen you say MPO, does that mean hosting, or a dedicated server that can eat my ass as it will never launch?
either
if it's in the multiplayer mode your server and client entities need to be told to communicate
tables, strings and numbers only afaik
you can send a table of x,y,z to compare
it shows moddata?
how can i access this wonderful tool
aud?
there's a few things it could do with - overall solid tool
Hii just curious, is there any way to remove some items from the game safely? Or should I takeout the items manually from the scripts file?,
FFFFFFFFFFFFFFFFFFFFFFF
InventoryItems and IsoDirections as well (see zombie.network.TableNetworkUtils.class)
yea can you elaborate a bit? only AUD I know is Australian Dollar
AUD is a zomboid mod
oh
Aiteron's User Debug
perhaps sprucing that up can be on the agenda for the community patch
putting all the tools in the same toolbox so to speak
speaking of which - I was supposed to roll that out today ๐ฆ
hmm, items is handy, not sure why they'd go out of their way to make a silly enum like IsoDirections work
oooooh
seems to be working
I kept getting stuck on the fact reading journals gave XP
initially I had it blocked but that made journals one way - as in you couldn't pass it onto a new journal
kept trying to go back and forth when the answer was to do both
rely on it getting blocked and feed the information manually during reading
I wonder if I should leave that in as a sandbox option
basically locking the XP to the journal so you can't make more
Anyone happen to know what determines the degree of darkness on squares you cannot see (as in through walls, through trees, etc.)?
i havent looked, but i suspect its used in the timed actions for building
Commands.KYRPT.getTrailer = function(args)
print("it Fired and vehicle");
local pX, pY, pZ = args.tX, args.tY, args.tZ
local square = getCell():getGridSquare(pX, pY, pZ)
local gCode = args.code;
local vehicle = square:getVehicleContainer();
local vMod = vehicle:getModData();
vMod.job = gCode;
end
``` this returns nil for vehicle.
how do you know there was a vehicle in the square?
local pX, pY, pZ = args.x, args.y, args.z
local serverFixAngle = args.dir
local gCode = args.code;
local sq = getCell():getGridSquare(pX, pY, pZ)
local car = addVehicleDebug(args.type, args.dir, nil, sq)
local carModData = car:getModData();
carModData.job = args.gCode;
car:transmitModData()
sendServerCommand("KYRPT", "getTrailer", {tX = pX, tY = pY, tZ = pZ, code = gCode});
becuase it spawned the trailer there.
if you spawned the vehicle, then just send its id and use getVehicleById on the other side, much easier than trying to search for it again
lol oh man
I think you missed it Skiz, but isoObject:getID BaseVehicle:getId
not the same, you could've used it this whole time
and there's also a getVehicleById()
didn't you say those changed though?
only after server has been rebooted
if you're sending a command right away after creating the vehicle, it will definitely be the same id
okay so that second set ofcode..
local CarID = DOWHATHERE;
car:transmitModData()
sendServerCommand("KYRPT", "getTrailer", {id = CarID, code = gCode});
local CarID = car:getId()
Commands.KYRPT.getTrailer = function(args)
print("it Fired and vehicle");
local gCode = args.code;
local car = getVehicleById(args.id)
local vMod = car:getModData();
vMod.job = gCode;
end
``` and this should grab it ?
yep
I don't think my idea for tracking TV XP is going to work
but I can atleast block it from being transcribable
car is nil
you didn't happen to use car:getID() instead, did you?
Commands.KYRPT.getTrailer = function(args)
print("id: " .. tostring(args.id) .. " and code: " .. tostring(args.code));
local gCode = args.code;
local car = getVehicleById(args.id)
local vMod = car:getModData();
vMod.job = gCode;
end
Commands.KYRPT.spawnTrailer = function(player, args)
local pX, pY, pZ = args.x, args.y, args.z
local serverFixAngle = args.dir
local gCode = args.code;
local sq = getCell():getGridSquare(pX, pY, pZ)
local car = addVehicleDebug(args.type, args.dir, nil, sq)
local carModData = car:getModData();
carModData.job = args.gCode;
local CarID = car:getId();
car:transmitModData()
sendServerCommand("KYRPT", "getTrailer", {id = CarID, code = gCode});
local FixAngle = IsoDirectionsToAngles[serverFixAngle] or 0
car:setAngles(180.0, FixAngle, 180.0)
--Clear out part inventories of random items that spawn in when we spawn vehicles in.
if args.clear then
for i = 0, car:getPartCount() -1
do
local part = car:getPartByIndex(i)
local container = part:getItemContainer()
if container then
if container:getItems():size() ~= 0 then
container:removeAllItems()
end
end
end
end
if (type(args.condition) == "number") then
for i = 0, car:getPartCount() -1
do
local part = car:getPartByIndex(i)
if part:getCondition() > 0 then
part:setCondition(args.condition)
end
end
end
end
LOG : General , 1672371264991> 87,130,843> id: 255 and code: load7.6561197979283824E16```
that's what the log prints.
but the car is nil.
i wonder.
dammit no..
if i wanna update my mod does it auto update
yes
there is a voice in my head screaming at high decibels ๐ฆ
oh
but not the whole ass mod info.
i have to do that in steam workshop
that's a new mod then.
what are you wanting to do?
now are you doing this in your LOCAL folder, your WORKSHOP folder, or the STEAMAPPS folder.
@faint jewel Just to elaborate a bit on the whole vehicle IDs changing thing (if you end up using getVehicleById()) - how it seems to work is that a vehicle gets given a new ID when it's loaded into memory. With RV Interior, since it teleports the player far across the map into the interior map, I can see that the vehicle ID of the vehicle they entered is different when they're teleported back to be next to it again. So, I believe vehicle IDs are useful for client/server interactions, where the vehicle is in memory and the client can use it to say "that vehicle", but once the vehicle is unloaded from the server's memory for whatever reason, the old vehicle ID won't be valid and won't (necessarily) match the ID assigned to the same vehicle when it's next loaded up again.
Not really relevant to your problems right now, but I thought it was worth sharing how it seems to work.
I am losing my damned mind.
I wonder if creating a vehicle with the debug command doesn't sync the ID's properly
What, the Spawn vehicle UI? That hasn't caused any problems when testing the RV Interior code in (locally hosted) MP...
does it use the addVehicleDebug function that he is using?
local car = addVehicleDebug(args.type, args.dir, nil, sq)
Does anyone know what might be causing the two pixel wide line to appear on the south facing poster?
Then they would be on top of each other with missing line
The red line is end of first half, blue is second half of the image
Is there something blatantly obvious I'm missing here lol
The item works, it's in my inventory with the icon and name, but the model just doesn't show up. I can place it on the ground, but it just has no physical model for some reason
there is 100% a "models_X/WorldItems/Figure_Tank.fbx", so that's probably not the problem
Tried upping the scale and restarting two times, first was 10, then 100, still doesn't show
Could the quotation marks in the DisplayName be confusing the parser? Although you'd think that would mess up the item itself, not its model.
I already had the same problem, but the error was in the 3D model, so I used one from the game and it worked 
I don't think so lol, I've used quotations in item names before just fine + I'm pretty sure it would give an item error
I imported another model and it worked, so then I imported both that model that worked and my model into blender, my model was (real calculation) 1,000,000 times larger than the other one, I scaled it down from 1 to 0.0001 and it worked in-game. Might have been the same problem for you lol
Unless by "error" you meant actual debug log error, then, 
is there a way to get all known/spawned vehicle in the world
TY!
What is the is/set/getToxic for IsoBuildings?
so apparently... getvehiclebyid, only works right on the server side.
generator fumes

Do you mean to ask whether your mod on the Steam Workshop automatically get updated when you change local files?
If so, the answer is no, you need to push the update using the same menu from which you originally published the mod.
is there an easy way to remove a vehicle permanently?
Despawn em
i am trying. they just come right back.
fffffffffffffffffffffffffffff
vehicle:removeFromWorld() - nope
vehicle:permanentlyRemove() - nope
vehicle:Destroy() - CRASH.
Look for the code related to admin context menu despawn u might find it there
Ill send it to you when i get back
i already did.
sendClientCommand(playerObj, "vehicle", "remove", { vehicle = vehicle:getId() })
else
vehicle:permanentlyRemove()
end```
is there a way to make a placed trap occupy 50x50 area so other traps can't be placed there?
if you place a moveable object, other objects can't be placed? So it should work by default
I think he wants a 50x50 range to the block
I can foresee issues with the scan and unloaded squares - but 50x50 should be within the scope
he says he wants his trap to be that size, sure it's abnormally big but if it blocks the square that's enough
I ... could be wrong, but I think he means he wants the trap to prevent other traps within a 50x50 area from being placed
Now that I reread his statement, I'm not sure lol
anyone know a mod that lets me have runners? like joggers not full on out sprinters
Difference between IsoGameCharacter and ILuaGameCharacter?
One is java and the other one is Lua?
So ILua for interface and stats, and ISO for animations and things like that?
@finite radish were you the one that mentioned they had something parsing changes to the java?
I've never used ILua for anything - interface in this case is for the Java
An interface is a completely "abstract class" that is used to group related methods with empty bodies
I wouldn't use it / think about it
IsoGameCharacter implements ILuaGameCharacter, and even if you wanted to use it directly it wouldn't make any sense unless it's a static function (and I doubt it has any members that are)
doesnt seem to be used that much eitherway
not sure what you mean by this in particular
I recall someone saying they had made something (github maybe?) that showed differences in decompiled code
I think that was DeltaMango, in the mapping discord
(if it wasn't, he has something similar I'm fairly certain)
ah ty
setting up a community patch repo - has the ability to upload to workshop from github
figured being able to tell changes made would come in handy
also - it's used quite a bit, it has a lot of helper functions for Lua stuff to check various things on the player (current weapon, sleep functions, stats, moodles, debug/cheat stuff, etc.)
interfaces are just guidelines on what a class needs to implement functionality for though, to allow compatibility between classes. not sure why that's the case for this but I'm sure it exists for a reason
the actual implementation/functionality of the members is implemented on the class itself though
(that's why using ILuaGameCharacter by itself isn't even really possible - none of the functions/members actually do anything until their implementation is defined by a class)
I mistook the fact it's sparsely referenced as to mean it's not used
Currently gathering some 'issues' that can be addressed by whomever.
also @tame mulch Would it be alright if AUD got an update/used as a base under this?
relatable
you want to create guns or melee weapons?
https://youtu.be/2M2fWLBLaX8 i learn making gun mod by this guy. he's my virtual sensei eheheh
0:00 Intro
0:29 Video Start
1:00 Start Blender
1:22 Using a background image
2:04 Using photoshop to edit the background image
2:52 Adding the edited background image to blender
3:26 Adding the cube mesh
3:46 Quick start with the cube
4:56 Importing a finished 3d Model from the internet
5:56 Moding the imported model
6:47 ADD NOTE ABOUT MAGAZIN...
It would be nice if you can create to a debug tool that prints out the exact commands a function does
Sorta like error magnifier but ijstead of the mod that used the print it logs functions that did run the command. Everything would be uncovered and replicating functions would be easier. Idk if this is possible but just an idea
Does anyone know what might be causing the two pixel wide line to appear on the south facing poster? It is not short as the two images meet at red and blue lines
Could you clarify?
Like if i for example
Do a command
getPlayer():getInventory():Additem("Base.Apple")
It will then print
Command executed:
getPlayer():getInventory():Additem("Base.Apple")
Not sure this is possible
you want it to print every single piece of code that runs?
it is possible if I overwrite the functions but, yeaaah, lmao that'd make the log unreadable
this would effectively be like adding a print after each if()
I don't think it would have a wide range of use outside of a last resort
I could make printing easier
print fingerprint shows the mod it comes from but it could also include the function and line
it uses the same info that error mag does
I just clip the text
Just a suggestion
.an idea that would simplify learning as we can see whatever stuff is being run. I doubt its possibe tho but maybe it is for u idk
you could have it just be print(var) and it would say what function it's coming out of
Thats an alternative or maybe return all funxtions with that var
I get what you mean - but if we use your example - if the item doesnt appear and the modder cant tell why - they can just start adding in prints along the way
I'll think about it - unless someone else sees the merits and wants to do it
๐
I do think having a debugPrint() that doesnt require much fussing to get a clear message might be a good idea
yeah i like that
x2
I'm going crazy trying to understand how to add a simple button
Still trying to understand and learn how everything works
anyone familiar with hashmaps know if it's possible to check if it has a value over a certain value?
I need to see if a player has a xpboost over 0 - but I dont want to parse each skill
it's for a tooltip...
maybe I can add it on oncreate
Another idea if i may
For example
getPlayer():getUserName()
getPlayer():getSteamId()
getPlayer():getStats()
Of we could
printOptions(getPlayer())
And then prints out all the available stuff that is followed by getPlayer()
It would be hell alot easy doing research while on debug
intelliJ does that tho
Esp if it we are dealing with like for example bodyparts
That shit is confusing to deal with
Or moodle
Maybe
Not sure if its possible again
you can do that - not sure how it's better than just reading the javadoc though
I tried it it doesnt show everything tho or maybe my installtion lacks stuff
tyrir already posted a print like that
Is it a mod?
i've noticed my copy of the libraries doesn't really seem to understand inheritance
a snippet / file
I'm also not capable enough to make those kinds of changes
yeah... i tried to mess around with it but all that gradle stuff is a nightmare
atleast not automatically
Where can i file this sir
the tutorial konijima wrote is straight forward tho
you're gonna have to search I guess
if you don't see what I posted you should try again
Well if the suggestion isnt worth it then toss it. Im jist thinking of stuff that might be usefull comming from my experience which i think would be lot useful
I was talking about the gradle stuff there
right now the librariers can't tell isoPlayer comes from isoGameCharacter
Ow un mentioned aud
I made my own patch of it thats not uploaded on the workshop
Its just sonething i use while modding
You can define it using emmyLua typing tho
it's just a headache if you're not familiar with the class
If I get Aiteron's permission I can toss up a copy of AUD on the patch repo
There's a few things related to the UI that are busted
Speaking of iso player
Sorry kind of off topic
Do i need to send to server for these types of code to work
for i=0, getOnlinePlayers():size()-1 do
local chr = getSpecificPlayer(i)
chr:Say(restartMsg)
getSoundManager():PlayWorldSound('SOStagline', chr:getSquare(), 0, 5, 5, false)
addSound(chr, chr:getX(), chr:getY(), chr:getZ(), 5, 1)
end
being I dont think he killed his character 40 times in a row to test something ๐
But ill check the hordenight mod i think it does this .. i havent checked it .
MP say?
sounds should play fine for connected clients
as long as you dont move the emitter around
^ why EHE is currently janky with MP sounds
oh wait, kind of misread, yes it should run from the /server/ - and the process should be initiated by the server
if the process is initiated by a client you need to use a command to tell the server to do it's side of things
local function flagPlayerWithBoostedXP(id, player)
local pMD = player:getModData()
if pMD.bBoostedXP then return end
local pXP = player:getXp()
local boosted
for i=1, Perks.getMaxIndex()-1 do
---@type PerkFactory.Perk
local perk = Perks.fromIndex(i)
boosted = boosted or pXP:getPerkBoost(perk)>0 or nil
end
pMD.bBoostedXP = boosted or false
end
Events.OnCreatePlayer.Add(flagPlayerWithBoostedXP)
This should catch only positive cases until the end and return a caught positive or false right?
I need to sit down with the lua test bed and refresh how true/false handle with nots
it looks good to me
yeah, you're turning it to nil and then to false again
but the logic is fine, it will work as far as i can see
I swear I run into issues with false/true
Idk if it's kahlua related but once and a while I'll have to write out ==true or ==false cause 'if X then' somehow confuses false for true
I assume it's thinking 'well false is something'
doesnt seem to occur with the lua.org test bed
last time it was sandboxvars.
oh you know what - I think the issue was cause on-going saves get nil sandbox vars
so if you're trying to check against assumed default values you could run into issues
it should also be noted that 0 returns true, unlike a lot of languages
i.e.: the default value is true and you are using 'if not X then' - if you added the option after the fact it will come up as nil, and thus false
oh i had no idea...
that's actually pretty annoying, luckily i haven't had to deal with that yet
that flew under my radar a bit while trying to debug the journals
i'm sure i've written a lot of code vulnerable to that
I'm sure it's the cause to alot of my bug reports too
i wouldn't be surprised if some of the times were Kahlua issues though too tbh, that library is dead as fuck and extremely old
Nothing beats adding a new require to an existing mod tho
Servers will just load right up and disable the mod with no warning ๐ญ
all my items are gone, even when I added the other mod
pz and the steam workshop are really working hard to make me hate using dependencies as much as possible
I wish there was a better way to suggest a feature than just make a thread
they need to allow other contributors to upload
working in a large group is grossly shit
everything just gets so messy
github helps - but you have to rely on 1 uploader
one of the dream features for the community patch account is if they allow other contributors to upload - people could theoretically just add it as a contributor and we could have a template repo using the same hidden secrets for account info
so they keep the mod under their name - especially useful for on-going mods
but they can have a repo push updates from other authorized users
do you mean workshop? because github allows for what you're describing. I assume you mean the former but just making sure
I know, and yes
the issue is github actions require 2FA to be disabled
unless you spoof it using one of those shady authenticator spoofers
https://github.com/ChuckTheSheep/pz-community-patch
https://steamcommunity.com/profiles/76561199220019224
Dummy steam acc with nothing to steal
no 2FA
github actions, like the automated macro stuff? haven't used those before, that sounds annoying
steam could fix most of our issues
i wonder if you could upload via steamcmd
yes lol
I've never used steamCMD but I would assume it's the same API
apparently you can upload using steamCMD - what exactly is steamCMD?
it's what's used to actually retrieve workshop addons and a bunch of other stuff using the appid
it's the commandline version of steam more or less
ah
it's probably abit similar to the github action script then
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
jobs:
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: AnarkisGaming/workshop@v1
with:
appID: 108600
#publishedFileID -- workshop ID
publishedFileID: 2909488957
#changelog: 'log of changes'
env:
STEAM_ACCOUNT_NAME: ${{ secrets.STEAM_USERNAME }}
STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }}
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
I need to figure out how to generate a change list based on commits (ideally from their description) tho
pulled from an ARMA2 github action tutorial
i think the issue is that I'm pretty sure the upload process varies by how the game implements workshop
but I could be wrong on that
but either way if you wanna try it out, steamCMD is definitely the place to start
afaik the issue is steam only allows authors to upload
so I don't think the approach would resolve the issue
this is the other/more updated action: https://github.com/Weilbyte/steam-workshop-upload
but I wouldn't recommend seeding your 2FA
I'll have to look into steamCMD
why would you need multiple authors to upload if you have a git repo?
I mean uploading to workshop - can only come from 1 author
so the github action's secrets needs to be of the author account - to clarify
anyone can comit changes to the repo and with proper permission run that action
changed some terminology to clarify between workshop and github
I am collaborating on a mod and I have been added as a Contributor. I have a copy of their code in the Ark Dev Kit and I have been able to edit it. But how do I now upload it to Steam as an update to their mod? When I have tried via the โSteam Uploadโ button it seems to create a new mod with a distinct mod ID. I requested a copy of their mod.db file and tried that, but I get an authentication error from steamcmd.
Seems as though steamCMD has the same issue/restriction
I don't think steam considered teams/groups for the workshop
right, but I'm saying that's not really an issue - you have github for collaboration, and steam for releases. I don't know why multiple people would need to push a release build. major github repos rarely work outside of that either - usually release tags are handled either automatically or by a single individual (and certainly not multiple individuals at once)
your bleeding edge shouldn't be pushed to steam anyways, that's bad practice
I wasn't suggesting that - if your referring to the 'dream feature' portion - it was to include older mods into a community update process
right now the only option regardless if you use github or not is to reupload a new mod
that's where authorizing multiple authors on workshop would come into play -- as they would just have to add the modComm account
how so? do you mean in terms of needing to reupload the whole thing each time? I guess that's an issue if your internet is slow
I feel like we're misunderstanding eachother
in order to update a mod through github it requires an item-author level account on the workshop
this requires 2FA to be disabled
you can look at my server points mod to see how to do ui
if a mod author wants to opt into this to allow the community at large to keep uploading their older mod they'd have to put their personal account at risk
Steam allowing all contributors to upload would allow for a dummy Stem account to brunt that risk
without having to upload a new mod item entirely
If you use if var then.stuf return
This sometimes dont work. I aldo needed to write
Return true else return false
Idk why sometimes it works but sonrtimes id doesnt
yeah regardless of having github actions to push updates with a centralized account not being able to have contributers upload is terrible
What is your server ?
you got it wrong its a mod
https://github.com/Browser8/PZ-Server-Points
I think I get what you're saying, but at that point if an author abandons the mod then I think it makes sense for whoever is adopting it to have full control over that mod moving forward
of course, I just hate that for the sake of posterity
then don't abandon your mods ๐
or you know hand over the mod to someone?
needing to have everyone resub to a new mod is not great
- "Hey new modder, I like what you're doing - please give me ownership of that mod you're working on - I promise it's better"
Or like assign a staff that deals with modders issues
ty
having multiple authors potentially fighting over control of the mod, dealing with unwanted updates, placing blame on each other, etc. seems like a much worse solution to me
the system is the way it is now for a reason lol
you can just remove the contributors though?
^
it's this way cause the engineer at steam copy pasted the 'game guides' folder and renamed it 'workshop'
if anything at least being able to move ownership to someone else
by then the damage has potentially been done
not to mention you'd have to deal with conflicts between different uploads, if they aren't coordinating between each other on github or a similar platform
I don't think Steam should be expected to design an entire version control system for Workshop
I guess, but that's another problem - if you use the analogy of a household and who can turn on the hot water - having 1 person only be able to turn on hot water makes no sense
it does if you only have one faucet
if you let in someone to your house and they start flooding your sinks - that's kind of on you
yeah, but it's also going to be on steam or the devs of the game in question - because people will start throwing a shitfit over stuff like that
I would agree with this except for the fact they already do - you can revert your uploads to any previous version
it's much easier to just say "this is the guy who pushes releases, if you want version control use version control software"
and simpler, too
and really not that much of an issue imo
likely via archive, rather than by diff
(which isn't really version control, in the modern sense)
Lets adress everyones problem abt the workshop update. I mean if a modder choose to update a mod and u happen to be a server with that mod u have to restart
Why cant it just be something like
If this servers mod is updated then update else dont
So that everyone can connect and not do restart
I don't fault steam for not wanting to sink time into this - but I think we can all agree the current process is lack luster when it comes to teams and long-term maintenance
I don't see the issue personally, having worked on a couple of teams for mods on other games with workshop
Yeah but i think itsafe to say that other workshop games have this issue too... I wonder...?
they don't - because most people will just do what I've been saying and use github for version control and steam for actual releases
it's even easier if you have a release schedule, but even without one it's perfectly fine
I'm not saying to not use gitHub - I actually recommend it for any sized project - team or no team
absolutely
I assume you can make a 1-click solution for steamCMD to pull from github?
git pull upstream
upload mod
done
yes, that's what we do for EHE
I havent actually experience restoring previous version from a github backup
restoring commits is easy as cake. it really is worth it just to learn how to use github in and out though, especially via commands
makes everything a thousand times easier
pruning, merging, staging your changes properly, maintaining tags, etc.
About this what kind of functions are u looking to add?
nobody's complaining about github, they're complaining about steam only allowing one single, personal account uploader making github not very useful
I mean if modders contributes to it u kight want to add like guidelines to follow?
that doesn't make github any more or less useful at all
it's entirely unrelated
if you have a team large enough for stuff like this to matter, you should be managing your repo in a way that makes this a nonissue
i.e. everyone should be involved in the tagging process, so that you can determine as a team when a release needs to be pushed - then it's just on that person to push the update once it's ready. it's very simple
what happens when that person disappears
the issue isn't on github's ends or the project team's
work with people who don't disappear lol
or, at least, know how to hand off the project if they're going to disappear
Why exactly dont we do this on krp
that's not a solution lol
we literally just saw an issue like this though that was completely unavoidable
that's 100% the solution lol, it happens even in normal github repos for software
people trust some random guy with full access over X feature/repo/branch/etc. and suddenly you're waiting for months for him to come back
you can hand off / still run a github with out the direct owner
that's not nearly the same
Albion would u consider taking lead on the krp dev team?
no
figured u will decline
Glytch, gimme your mod - let it get uploaded using this other steam account
gimme those steam awards
Sure boss
Now I can decorate my steam profile with all my waifus
(also for the record, in both github and steam workshop, people use accounts that are created solely for their project to manage the repo/mod/etc. that's always an option.)
I do t really care much of the awards or top listing really.. just aslong as i have a few mods that i can show to clients then thats more thn enough for me .
Pz mode that are public on Github helps me research while on the fly. It lacks the find feature but atleast its viewable on mobile
Which is why i uploaded the whole pz lua and java as a private git just for reading
i sort of use github as a portfolio, i've used it very little for actual collaboration
clever but intelliJ lets you do this
I'm kind of worried you didn't set it up properly and you're bashing your head in trying to fix stuff
reminds me when I started modding and had to basically read through the classes by hand using ctrl+f
the shortcut in intelliJ to expand scopes is shift btw
shift+ctrl+f should brign up the entire project
you can confirm scopes at the top right - for current project only or to include all files (libraries)
same applies for file name searches ctrl+n and ctrl+shift+n
you can also lock it to file type for java
as the libraries muddy up the search with their lua-library counterparts
yeah lol
I was mistaken ctrl+n is class search
ctrl+shift+n is file
this actually helps with not having to change the scope or file types
if you fully decomp the class files, you can search the actual code too, in every file at once. highly recommend
that's what the libraries do - just also makes a Lua reference
oh, didn't know about the libraries. that's neat
i just created a batch script to decompile everything in /zombie/

yeah, the author unfortunately disappeared ๐๏ธ ๐ ๐๏ธ
it's fine he was a bit of a mop
yeah, you were around for that?

scared off everyone - but his library thing is cool
i think i remember interacting with you a bit back then, but it was a while ago now
i was the guy trying to convince him to clean up the code and make it more usable/readable for the average person to use
I left pretty early - and yeah same
told him to not require github usage outright - or to require having all that graddle shit intertwined with every project
seems like he eventually listened
i've been in and out of the zomboid community a lot without really ever releasing any of my work, since like 2015 or so. been playing since like 2012 though. it's been a wild ride
i thought his framework had some promise, but only if other people came in and started to help with it
I thought so too - but asking for all or nothing + multiple new programs is alot on someone unfamiliar/new to programming
tbh he had the right idea, he just needed to clean it up and streamline the gradle build process
he basically said 'well then they're not who "we're" looking for' unironically
yeah lmfao. the elitism was wild
he made me write tests in java insisting it was the right way to start a Lua mod
i did my bi-annual return to zomboid modding/etc. recently and decided to see how cocolabs was doing only to find it had died at pretty much the same time that I lasted checked up on it lmfao
neither of us knew what a vector was - and when I figured out how they work he got upset ๐ฆ
that still bugs me

paints a very specific picture
basically Dennis from always sunny
Sure! ๐
If need any help with patch - you can write me. I think I can help with this mod, because some fixes not good for main codebase, but good for mod (And in future some fixes will be released in main codebase but with better implementation)
those tests proved pointless cause TIS included a dead vector2 file that overwrites the exposure anyway - spent like 2 days looking at an output log to see X/Y position changes . _ .
breaking news: TIS dev tells modders "fix our game, our codebase only supports BUGS"
more at at 11
Awesome, thanks man ๐ - if I have questions regarding anything's purpose I'll shoot them over DM. Personally, I think all of it would be useful for default -debug mode ๐คทโโ๏ธ


update: it's still going

oh whoops, meant to post this in #mapping my bad. i guess it still sorta fits here, but whatever
How would I know if someone is typing + someome is inside a building?
Probably not - but because you can measure text width you can manually create a text-flow setup.
For checking if someone is typing, you could see how Chat Bubble accomplishes it.
https://steamcommunity.com/sharedfiles/filedetails/?id=2688676019&searchtext=chat
I'm kind of worried about setting it in a tooltip lol
might grab a constant string in the tooltip and set it up outside
the Mod: SRJ is the perfect length ๐ฎ
I'll check it out, do I find it in my workshop folder to check it out?
Anyone know of a way to overwrite footsteps dynamically? E.g. you equip an item and change the footsteps, then if you unequip they revert back to default footsteps
Where steam is installed\steamapps\workshop\content\108600\workshopID
Well that's not very helpful
Anybody know if someone has created a fork for better towing and lockpicking. They are some of my favorite mods but for obvious reasons haven't been updated. I was recently reminded of how much I missed being able to push cars when I had to clear out 3 damn road blocks for my bus.
took me this whole time to realize I Ieft out a parameter for measureX 
Konijimas community api has a luafilr called itemTooltipApi check it out
https://github.com/Konijima/PZ-Community-API/tree/master/Contents%2Fmods%2FCommunityAPI%2Fmedia%2Flua%2Fclient%2FItemTooltipAPI
too late - and I should know about that one
Ow u got it?
Ok
What is for ISPanel:derive?
Im sure . So consider it a reminder ๐
Does it have a wrap function?
Some metatable inherit stuff
Only wizards understands
Im trying to figure out abt this stuff too lol
Idk but it should
Also, I meant I'm a contributor lol - I should've known about his tooltipAPI
that project is using the same steam account for uploading as the comm patch I'm starting up
Yep
I mean u as a contributor i think i saw that too
Yeah, I think it was too ambitious / needed more planning / less scope
also the issue mentioned before with authorship and trying to get the ball rolling on a giant API package
if it were to be brought up again I think each API would have to be a standalone
If all the modders that made utils apis helpers tools
Etc
Come together and help build what your planning then it will be done in no time i bet
Or if the whole mod is free for all then combine it to something like aud
It will enable nodders to do testing and debug faster then just take the function they used from the tool since its free for all
Thank you, now all I need to do is check if someone is visible to someone lol
Or maybe it doesnt have to be a mod
Like a directory of functions and template would be nice
IsSeen() i think?
Or maybe im wrong .
I've never made a mod in zomboid, got no clue how it works but I use Lua often so I don't need to learn lua lol.
Any references I should use?
Try to get specific player the. isSeen()
Try it on debug
Open up 2 pz instances
Host:
-nosteam -debug
Client:
-nosteam
So you can test MP stuff
What are u trying to do exactly? If u dont mind me asking
Check if someone is visible and if they are typing so I can pop a "Typing..."above their head
For the rp server I play on because it's annoying having to guess when someone is typing
Theres already a.mod like that
using -nosteam will disable the Workshops folder - if you use the folder to develop mods you'll have to take out the MODFOLDER in MODNAME/Contents/mods/MODFOLDER and move it into the Mods/ folder
isn't that what chat bubble is?
Yeah, but I literally just want the typing thing and no chat bubble
(wrong mention)
so you want a different icon or just '...' above their head?
And chat bubble I'm pretty sure you can see it through the wall
If what my friend told me is correct
you probably can as you can see chat through walls
all its doing is adding an emote into the text
Ah yeah true, I guess being able to see text through walls completely removes the point of not being able to see it through walls lol
I've got what I need then
Use whisper
Wdym?
ohai. i'm learning a bit still and noticed you were able to make a tile from vanilla into a moveable and use it without a ton of extra code that causes performance issues. I wanted to do something similar with lightswitches. if you are willing to answer... i am trying to find out do you have an example of what that structure looked like as far as what was needed? i have the item and recipe down. but im trying to figure out. do i have to replace the entire newtilesdef with the indoor_lighting for lightswitches properties edited? or in your opinion would it be smarter for me to edit that tilepack and remove all properties except the specific tileset im using? or do you have a better way of doing it? i seen the namin scheme mattered also for the tile name vs the item name?
essentially working on a mod that will allow you to craft makeshift lightswitches and place them into room which will light up how it would if you used the tile brush to place, but be able to hold the item and use. also if anyone is aware how to add multiple tiles to one item for different directions to utilize the "rotate" feature so it can be just one item instead of one per direction if possible
Sure thing man
Need the visible thing because of pvp
Well for the vault containers is my own tiles so i can define it however i want.. for the atms
It was a messy thing
I had to destroy it but add it again as a new thing
With all the various changes on the property.
U really cant change the default tiles nature unless u make another one i guess
But i could be wrong..
U could probably write up a code that whenever a lightswitch is detected change that tile to whatver u needed
if i just use those tiles but remake a new pack (i will most likely use an editor to change the model itself also to have more of a makeshift look) that should work then?
just change the properties to allow pickuptool and placetool and moveable?
and whatever goes along with it... but how do i reference that in the item itself?
You can add a sprite without any property and when u spawn it u actually spawn the vanilla light switch then change the sprite
obj:setName()
obj:getSprite():getName()
ooooo
I think u need to modify both for it to chabge properly
siick. i got a ways to go still here but using this as my intro to figuring this stuff out lol. i really appreciate it
Its easier to create something
Its harder to change something
If get what i mean
Sure anytime man
๐ซก
yep. so just using and editing the original tiles and remaking a new pack with just those in it would be most ideal it seems
if i just rename is all it should take to not conflict?
and of course not overwrite anything else ๐
im not speaking in the grand scheme but just as far as not messing with currently functioning light switches
๐
clleaaan
oh and thank you for all your answers so far as well. i would have taken ahot min to get here solo
Yep since you are only adding light switch that would be all u need just spawn the default switch then change sprite
But i dont know if the light switches finctions after u spawn it
Cuz i think it has an offset thing
Not sure
as a tile it does
you can place the tile and as long as it recognizes its a room, will light that room. if thats what you mean
Also if you want to avoid codes
U can always create an overlay . But the limit here is that it should block the thing your trying to replace
ahhhh
yea, can use brush tool to add functioning ligfhtswitch anywhere is a defined room
U got the name of the light switch vanilla and your tile?
it's the ones from the indoor_lighting
Youre primarily a mapper right?
with the lamps
yes and tbh i literally just start anything pz related around 1.5 months ago
so tons of info blasted into me
i know 3d modeling and whatnot and did gta v modding and some old league of legends lua modding
Well i think light switches and lamps are different
well lamps already are moveable right
they are just the same tileset
is why i mention
like 8 tiles from that are lights switches indoor_lighting_01_01 i think is one
Ye u have to get the actual tile name
constructedobjects_01_20
This is the bear trap (wrote that based on memory so forgive me if its wrong)
oh awesome
The open bear trap
The open 1 is 21
i'm pretty sure my feeble mind is comprehending
yea the switches are indoor_lighting_01_01, 01_02, 01_03 etc
So if i need to convert the open to close
I need both names
Cuz i need to detect the open first then use the close to replace
Ah cuz of the directions
yes
it is semi important that im able to implement that feature
i can't remember wher ei saw it before
But you only need 1 pair to test if there are alot you need to create a function .
but i swear i saw and item with different types or something all within the item also. that was the other part of this that i wasnt sure about
typer of sprites
for each direction, can use place, hold cursor and it uses diff sprite depending on dir?
Which is what i did on my safecrackermod
It was hard to define em cuz there are alot
So ehat i did was all of the odd numbered tiles are close
And even numbered tiles are open
So it would be easier to check
Hello. Does anyone have a good farming mod?
thanks so much holy moly
feeling like i may be able to actually get this figured out
so this is still an issue. the first one it disappears for a second and then returns. the second does the same. the thrid just straight errors.
@drifting ore not really sure if it will work i just wrote it and not test it
function setLightSwitch (obj)
local tileToChange = "lightswitchname"
local changeInto = "yourlightswitchtilename"
if obj:getSprite():getName(tileToChange) then
obj:setSprite(changeInto)
obj:getSprite():setName(changeInto)
if isClient() then obj:transmitUpdatedSpriteToServer(); end
getPlayerLoot(0):refreshBackpacks()
end
end
Events.OnObjectAdded.Add(setLightSwitch)
there is a salvage context menu utilized somewhere also that removes cars right? if im super far off base ill stop, but would that work for what you are doing? at least as far as removing? @faint jewel
good idea
ill try it, this gives me a good foundation for seeing it written pretty cleanly as well, which is not my area of expertise ๐
thanks!!!
@faint jewel
function getCar()
local car = nil
local pl = getPlayer()
if pl:getVehicle() then car = pl:getVehicle()
elseif pl:getNearVehicle() then car = pl:getNearVehicle()
elseif pl:getUseableVehicle() then car = pl:getUseableVehicle()
end
return car
end
local vehicle = getCar()
sendClientCommand(getPlayer(), "vehicle", "remove", { vehicle = vehicle:getId() })
this worked for me
i just tried it on a live mp server
using debug
When it comes to giving items mod data in the script files, anyone know if I can make a table internally?
Like- I basically want to make a mod data sub-table within the item script if that is possible

getPlayer once pls ty
dont think you can do tables in the script
however you can do it with lua
sorry done
local items = {
"Pistol", "Pistol2", "Pistol3", "Revolver_Short", "Revolver", "Revolver_Long"
}
for i, item in ipairs(items) do
SOMETHING
end```
@winter thunder is the only way i've used a table so far and its fast and works
Ideally it would look something like this. So that I could reference the mod data with like item:getModata().Gusher.type
item ExampleUsingGushers
{
DisplayName = Blue Raspberry Gusher,
Type = Food,
Weight = 0.1,
HungerChange = -100,
Gusher =
{
Type = Fruit Snack,
Flavor = Blue,
AreDogsCool = Yes,
Cost = 500
}
}
oh you want to with the item itself
nah so, I have a framework using LUA. I am just thinking it would be easier to instance my info inside the item def instead of a secondary table
You can write mod data to items that way, as long as the variable is something new, the game will just consider it mod data. I am already doing it to give the name of the reference table to my function from the item
god i have so much to figure out still
This was the item that I made for testing my function lol
again you can do it from lua
no , on the last entry
local items =


