Jump to content

Search the Community

Showing results for tags 'modding'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News & Announcements
    • News
  • Project Zomboid
    • PZ Updates
    • General Discussions
    • Bug Reports
    • PZ Support
    • PZ Multiplayer
    • PZ Community & Creativity
    • PZ Suggestions
  • PZ Modding
    • Tutorials & Resources
    • Mods
    • Items
    • Mapping
    • Mod Ideas and Requests
  • General Games Development
    • Indie Scene
  • Other Discussions
    • General Discussion
    • Forum Games & Activities

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Twitter


Location


Interests

Found 48 results

  1. WordZed Version 1 - download You can add custom radio data to the game via a mod. The radio data including final translation files should go into "media/radio/" within the mod directory. Optionally this simple mod package can be used to get started quickly: RadioTestMod Note: The current version may contain some bugs, which can be posted here when encountered. Some additional info bits: The following spoiler contains a list of channels from the games radio data, if you intend to use wordzed for custom contentavoid these channels unless you intentionally want to override a certain existing channels. The following tutorial video has some information on the operating basics: Manual: Manual.docx
  2. **THIS IS A NEW FEATURE THAT CURRENTLY ONLY WORKS ON THE WEATHER TEST BRANCH, MAKE SURE YOU ARE SUBSCRIBED TO THE WEATHER BETA BRANCH BEFORE TESTING** 1) The first thing you want to do, as with most mods is to create your mods folder structure, use the image below as a reference, replacing MOD_NAME with the name of your mod: Don't worry about the files shown above, you will be creating them as you follow this guide, just make sure to remember, anytime you see "MOD_NAME" in this guide, replace that with the name you chose for your mod. 2) In your "..mods/MOD_NAME" folder, create your "mod.info" text file which contains the following code: Remember to replace all "MOD_NAME"'s with the actual name of your mod. 3) In the same folder, create/place your MOD_NAME.png , this will be the thumbnail used in game as the poster/picture for your mod. 4) Next up, in your "mods/MOD_NAME/media/lua/client" folder, create your MOD_NAME.lua file with the following code inside: This is the script that will load your model and scripts into the game, it also controls the spawn rate for the car in each type of zone as well as providing the vehicle mechanic overlay. Remember to replace all instances of "MOD_NAME" with the actual name you chose for your mod. 5) Next, in your "mods/MOD_NAME/media/scripts/vehicles" folder, create your MOD_NAME.txt file containing the following code: This script example contains all of the parameters to control the simulation of the vehicle, such as engine power, gear ratios, collision cube and much more. You will (hopefully) find it well commented to give you an idea of what each parameter does. You can look in the games "media\scripts\vehicles" folder for a vanilla vehicle script that more closely reflects the vehicle you are adding rather than starting with the example above, have a good look through them all to get a sense of the different templates you can use and the various changes that can be made to different components. 6) Now you need to (if you have not already) make the 3d model for your vehicle. We suggest using Blender, but as long as you're experienced in 3d modelling, any program that can export .ply files should work, just make sure your faces are triangulated, in Blender you can do this by selecting your model in Edit mode then pressing Ctrl + T. Then drag and drop the exported ply file onto the converter supplied below (unzip the below file, drag your .ply directly onto the .exe, do not double click the exe), it will output a new txt file with the same name as the .ply in the same directory. Copy the new .txt file into your "mods/MOD_NAME/media/models" folder as "Vehicles_MOD_NAME.txt This is the .ply to PZ convertor: PZ_PLYtoPZconverter.zip 7) Now it's time to create your vehicles texture files, these should all go into the "mods/MOD_NAME/media/textures/Vehicles" folder. First up is your "Vehicles_MOD_NAME_Shell.png" , this is the main texture image for your vehicle and needs to be 512x512 pixels, as do all of your textures, below is an example: Next there are 6 different overlay/detail png's to create, the first is for the vehicle lights ("Vehicles_MOD_NAME_Lights.png"): Then the vehicle rust ("Vehicles_MOD_NAME_Rust.png"): The next 2 image examples ("Vehicles_MOD_NAME_Shell_Damaged01.png" and "Vehicles_MOD_NAME_Shell_Damaged02.png") are to show light and heavy damage, respectively, on the vehicle's shell. They are used to represent dents in the bodywork: The next 2 image examples ("Vehicles_MOD_NAME_Overlays_Damaged01.png" and "Vehicles_MOD_NAME_Overlays_Damaged02.png") are very similar to the previous 2 except they are for showing damage on windows and lights as well as scratched on the body work: The last file we need is the vehicle colour mask ("Vehicles_MOD_NAME_Mask.png"), which should also be placed in your "mods/MOD_NAME/media/textures/Vehicles" folder. This tells the game which parts of your vehicle texture correspond to which part of your vehicle model and is needed to display damage, lowered windows and removed elements etc: Here the colour values to be used: Copy your complete mod folder structure into your C:\Users\YourUsernameHere\Zomboid\Mods folder, load the game, turn the mod on in the mod menu and start a new game, your new vehicle is now ready to be found and taken for a spin. Finally, here: ZAZ968M.zip - you can find an example vehicle mod using the above instructions. Notice the included example mod uses a slightly different process with its textures/overlays. The main texture is transparent while the detail has been shifted onto the vehicle_lights .png. This allows the game to automatically and procedurally generate different colours of your car when they are spawned in. Happy Modding!
  3. Greetings! I'm trying to use for modding a cooking recipe similar to the "Disinfect Bandage" like the way of using an item while is hot to craft another, but I can't find the script or code related in the media file to the whole heat system. Is it controled by some Lua code or some item script? I think that the logical way that the heat value works is only because of the WaterSource items like FullKettle or WatterPot. I mean I´ve tried something like a stone for frying an egg for example: recipe Fry egg On Stone { Stone, Egg/WildEgg, Salt;1, Result:FriedEgg, Time:50.0, Heat:-0.22, Category:Cooking, } The recipe won't happen because there is no base item to be heated, also how does the scale of the heat value works, it's just setting Heat:-0.22? . Thanks!
  4. RoboMat's Modding Tutorials - An introduction to modding for Project Zomboid - I - Introduction I1 - Where to start I2 - What is needed I3 - Lua Tutorials I4 - Other Resources II - The first steps II1 - Getting the connection II2 - The entry point: Events III - The first mod III1 - Preparations III1a - Folders III1b - Our mod's identification card III1c - The actual lua script III2 - Adding items to the inventory III3 - Handling keys III4 - Detecting the correct key IV - Custom professions IV1 - Creating a custom profession IV1a - The foundation IV1b - Creating the profession IV1c - Creating a new trait IV1d - Custom Spawnpoints IV1e - Custom Profession Clothing IV1f - Putting it all together IV2 - Linking Professions / Traits to game mechanics I. Introduction Hello there, this is my attempt to write a few modding tutorials for the community. I will try to update this whenever I have some spare time. 1. Where to start First things first. When I started looking into the code of Project Zomboid and the different mods I was a bit confused. There was the source code in Java, the additional code in Lua and the scripting language and I didn't really know which one to look into. To spare you this confusion I'll explain their purpose shortly: Java: Most of the source code of Project Zomboid is written in Java. While you can modify the java files it is not recommended. According to the developers changing the java source code won’t be necessary in future versions of Project Zomboid, so we won’t look into that. Eggplanticus has made a nice post about how to spelunk in the Java source if you want to try it nonetheless. Lua: There already are parts of the source of PZ that have been ported to lua. If you really want to get into modding, you won't get around learning its syntax. Scripting: At the moment it is only used for easily adding items to the game. While we will cover some of the basics of the scripting language we will mostly work with lua coding. 2. What is needed Basically to edit a lua file you can use any standard text editor that is capable of saving simple (unformatted) text files. So Wordpad (Windows) or TextEdit (Mac OS) will do. While it is possible to create a script with those programs they miss many features a specific IDE will give you (syntax-highlighting, auto-formatting, etc...). I prefered working with Eclipse IDE with an extra lua plugin installed for quite some time, but recently switched to IntelliJIdea - haven't been looking back ever since. There are other free alternatives like gedit, Notepad++, ZeroBraneStudio or XCode for example. Find one that works for you and stick with it. Remember: It's not the program that does the work. None of them will turn you into a RobertJohnson over night, they only make your life easier. 3. Lua Tutorials If you have some experience with programming already Lua will probably be fairly easy to pick up for you. I mainly used the official manual to learn the language, but of course there are many other great tutorials out there. From time to time I check the lua wiki and of course stack overflow. Just to be as clear about this as possible: This won't be a tutorial about lua. It will be a tutorial about modding Project Zomboid. If you don't understand parts of my code, you probably should learn some basic lua syntax first. If there is one thing I don't like then it's people who don't even take the time to read through the tutorial notes, then copy&paste the code and finally spam the thread with questions about "why it doesn't work". Don't be that person (unless you are Rathlord). 4. Other Resources For more tutorials you should visit pz-mods.net and the tutorial section on the indiestone forums. If you have further questions you can post them in the modding help section of the the indiestone forums and one of the many coders will help you for sure. TOC Last updated: 12.11.2013 II. The first steps Okay now that we got that out of the way let's move on to the actual modding part. 1. Getting the connection To mod the game we somehow have to interact it. Lua's main purpose lies on extending existing programs written in other programming languages. As mentioned in the previous chapter the main base of Project Zomboid was written in Java. That's where the connection between lua and the java source code happens. With lua we can access all the public functions written in the Java source code. -- lua function function doStuffInLua(_player) -- getSpecificPlayer() is a public method defined in the java source code -- that returns the player. We can access it through lua. getSpecificPlayer(_player); end But how do we know which methods there are!? Well, we can look at the javadoc. It's basically a complete list of all methods in the Java source code and it has even been updated to 2.9.9.15 recently. If you want to be on the save side I suggest that you open the source code and look through it yourself. I use a small programm called JD-GUI for that purpose. It has a useful search function that can search through the whole source code. In the course of this tutorial I will mark methods we call from java so you don't have to worry too much about that at the moment. Eggplanticus also released a good tutorial on how to decompile the java source over here. 2. The entry point: Events So now we know that we can call Java methods from our lua code, but we still don't know how we actually execute our lua code. We need something that runs our code, when Project Zomboid runs. This will be done with Events. You can think of events as entry points to the source code of the Project Zomboid source code. Once Project Zomboid encounters an Event from a mod it calls the associated function. -- the function we want to execute function sayStuff() -- Java: we get the first player local player = getSpecificPlayer(0); -- Java: let the player speak player:Say("I like turtles."); end -- this event will be fired every ten ingame minutes. -- In this case sayStuff() is the associated method and -- thus will be executed every ten minutes. Events.EveryTenMinutes.Add(sayStuff); This short "mod" lets the player talk about his love for testudines every ten minutes in the game. Nothing great but it gets the point across. There are already many different events added to the game which we can use for our mods and the developers are constantly adding new ones. For a somewhat complete list check out the Event Reference on pz-mods.net. Don't worry though, we will use some of them throughout this tutorial so you will slowly get the hang of it. TOC Last updated: 01.10.2013 III. The first mod Let's continue with a little more complex example. We will create a small cheat script that adds some items to the player's inventory when a certain key is pressed. 1. Preparations At first we're going to set up a proper folder structure and all the files we'll need to get the mod to work with Project Zomboid. Please note that this tutorial has Version 2.9.9.17 and later in mind and thus is going to use the structure needed to work with the modloader. If everything is done right our mod will later on appear in the game like this: The almighty RobertJohnson has released a more in-depth tutorial about the modloader and mod.info functions. Once that version is released I'm going to update this post too! a.) Folders Please note, that the folder structure might slightly variate depending on what IDE you are using. I'm going to show you the end-structure which I use when I release my mods: I named the topmost folder (we are going to call this the base folder from now on) after our mod: CheatMod. This base folder is going to contain ALL of our mod files. The "media/lua" folder is basically the location of the vanilla lua files. When we drop our mod into the modloader it is going to copy the files in our base folder to their specified location in the PZ source files. This way our mods don't overwrite any base files and the mod can be removed from the game at any time without breaking it. Yay for the nifty modloader! b.) Our mod's identification card The modloader needs some way of identifying the mods given to it. This is done by the so called mod.info file. It is a simple (unformatted!) text file which contains some important information about our mod. It must be put into the base folder: To make it work we will have to fill it with information of course. Copy this to your mod.info file: name=Cheat Mod (1.0.0) poster=poster.png description=This mod is used to explain modding for Project Zomboid. It is going to show several aspects of modding from start to finish. -by RoboMat id=CheatMod name: The name of the mod. poster: The image file that is displayed in the mod menu in PZ. description: A short description of your mod. I am not sure how many characters this supports. id: The id of our mod. This is used to identify our mod. The id must have the same name as the base folder of our mod (in this case: CheatMod). If you drop you folders into your Project Zomboid "mods" folder now it would already display it as a mod in the game: Of course this isn't really a mod yet. We still need to give it some functionality c.) The actual lua script The last file we need to create is the lua script file. We are going to call it "AddItems.lua" and put it into "media/lua/Mods/CheatMod". Make sure that you really are using the correct suffix of ".lua". Now we are set and ready to begin working on our first mod! 2. Adding items to the inventory We are going to start with a simple script that allows us to add a few items to the player inventory as soon as a certain key is pressed. Adding items is a fairly easy task as you will see. Open your AddItems.lua and enter the following code. local function addItems() local player = getSpecificPlayer(0); -- Java: get player one local inv = player:getInventory(); -- Java: access player inv -- Java: add the actual items to the inventory inv:AddItem("Base.Axe"); inv:AddItem("Base.RippedSheets"); inv:AddItem("camping.TentPeg"); end As with the previous examples our starting point is the player. We need to "get" him first with getSpecificPlayer(0). We then can access his inventory with the getInventory() call. "getInventory()" returns an ItemContainer which happens to be the player's main inventory. This means we now can use all the java functions defined for the ItemContainer.class and one of them happens to be the nifty AddItem(...) function. If you look at the javadoc of this function you will notice that it expects a String as a parameter. What it doesn't tell you is, that it actually needs the module of the item you want to add and the name of the item itself. You can read our example above as "add item Axe from module Base". The code above would give the player an axe, some bandages and a tent peg from the camping module. How do you find out the modules and names of the items? Of course by looking through the source files. All items are currently located in "/media/scripts/items.txt", "/media/scripts/newitems.txt", "/media/scripts/camping.txt" and "/media/scripts/farming.txt". Just take a look at these files - the rest should be self explanatory. 3. Handling keys As we haven't defined an event yet, the function is pretty useless right now. We want the items to be added whenever the player presses a key and luckily the devs have given us the great OnKeyPressed event for that purpose. Let's add it to our mod: local function addItems() local player = getSpecificPlayer(0); -- Java: get player one local inv = player:getInventory(); -- Java: access player inv -- Java: add the actual items to the inventory inv:AddItem("Base.Axe"); inv:AddItem("Base.RippedSheets"); inv:AddItem("camping.TentPeg"); end -- Will be fired whenever we press a key. Events.OnKeyPressed.Add(addItems); This event will be called whenever a key is pressed in the game. The only problem is, that the event doesn't care which key that is. If we would leave our mod like this, the player would get spammed with countless items. We need to fix that! 4. Detecting the correct key One of the great things about events is, that some of them pass useful parameters to the function which is called through the event. The OnKeyPressed event for example passes the number of the pressed key to the function. The called function in this case is of course "addItems()". To use the parameter we have to slightly modify our code another time: -- We added the parameter to the function which -- will be passed to the function as soon as the -- event fires. local function addItems(_keyPressed) local key = _keyPressed; -- Store the parameter in a local variable. print(key); -- Prints the pressed key to the console. -- We test if the correct key is pressed. if key == 25 then local player = getSpecificPlayer(0); -- Java: get player one local inv = player:getInventory(); -- Java: access player inv -- Java: add the actual items to the inventory inv:AddItem("Base.Axe"); inv:AddItem("Base.RippedSheets"); inv:AddItem("camping.TentPeg"); end end -- This will be fired whenever a key is pressed. Events.OnKeyPressed.Add(addItems); Notice the _keyPressed parameter that was added to our function. You might wonder about the leading undaerscore. It is just a thing of coding style that I like to do, to be able to distinguish parameters from local variables in the function's body. The same goes for storing the parameter in the local variable "key". It might seem superfluous at first, but if you want to change the content of this variable later on, you can easily do that by changing its declaration at the top of the functions instead of having to track down every single occurence. Anyway, they _keyPressed parameter will receive a number corresponding to the pressed key and pass it into our function. Unfortunately I'm not to sure which numbering method is used in Project Zomboid, but I think it might be the one from LWJGL. You can use the print(key) call in the function to easily find out all numbers you need to know anyway. Basically we just have finished our first real mod. Save the AddItems.lua and copy your base folder into the Project Zomboid-mods folder. Now you can go into the game and enable your mod (restart the game afterwards!). Once you are in the game now, you should be able to cheat items into your character's inventory by pressing the 'P' key on your keyboard. TOC Last updated: 12.11.2013 IV. Custom professions Admittedly our first mod isn't very impressive so we are going to expand it a bit. The biggest problem at the moment is, that the player can cheat weapons into his or her inventory every playthrough, which might ruin legit savegames. 1. Creating a custom profession That's why we are going to create a custom "Cheater" Profession and link the cheat code to it. a.) The foundation Of course we need to create a new lua script. I'm gonna call it "CheaterProfession.lua" and save it in its own folder (Note: Basically it doesn't matter where you save your lua files, but good structuring will make it easier for you and others to organize and understand your project). After creating the file open it and add the following lines: -- CheaterProfession.luarequire'NPCs/MainCreationMethods';require'NPCs/ProfessionClothing'; This basically makes sure that the file is loaded after those two files which enables us to use their functions. (If someone has a more technical explanation feel free to PM me or comment below!). b.) Creating the profession Now we can start with actually creating the new profession. Add these lines to your CheaterProfession.lua -- CheaterProfession.lua require'NPCs/MainCreationMethods'; require'NPCs/ProfessionClothing'; local function initProfessions() -- Java: Create a new profession. local cheater = ProfessionFactory.addProfession("cheater", "Cheater", "Prof_rm_Cheater"); -- Java: Add a custom trait called Undesireable (no one likes cheaters ). cheater:addFreeTrait("rm_undesireable"); -- Java: Add the vanilla trait Nightowl. cheater:addFreeTrait("NightOwl"); end Lets go through the code. The part of it which actually creates / registers the new profession is: local cheater = ProfessionFactory.addProfession("cheater", "Cheater", "Prof_rm_Cheater"); It calls the addProfession(String type, String name, String IconPath) function of the ProfessionFactory. The parameters are used like this: type: Used to identify the profession internally in the game's code. name: Human readable name which appears in the game's menus etc. iconPath: Name of the custom icon to be displayed in the game. If we would leave the code here it would create a fine new profession without any traits though. That's where the remaining two lines come into play: cheater:addFreeTrait("rm_undesireable"); This adds a (you probably guessed it) trait to the profession we just created. "rm_Undesireable" is the trait we are going to create in a few seconds whereas "NightOwl" is one of the vanilla traits. Of course PZ doesn't know "rm_undesireable" yet, so we still have to actually create it. Lets do it. c.) Creating a new trait We add a new function above the one we created above to initialise the traits. local function initTraits() TraitFactory.addTrait("rm_undesireable", "Undesireable", 0, "Allows you to cheat.\nShame on you!", true); end Quite similar to the ProfessionFactory we used above, the TraitFactory class allows us to add a new trait by calling addTrait(String type, String name, int cost, String desc, boolean profession). Let me explain those parameters: type: This is the internal name used in the games code. It's also the name of the custom icon to be displayed in the game. ! Has to be lower case ! name: The human readable name displayed in menus etc. cost: Determines how many trait points it will cost to select this trait. desc: The description which appears when you hover over the trait. profession: If set to true the trait won't appear as a selectable trait but instead stays a "profession-only" trait. It really is as easy as that Now you actually already have a fully functional profession which you could play with. But it still is lacking two important parts of the profession system: Spawn points and custom clothing colours. d.) Custom Spawnpoints Spawnpoints determine where in the Gameworld the player will appear when the game starts. Before we can add a new spawnpoint though we of course need to find out its coordinates in the game. For this purpose I have created the "Coordinate Viewer", which displays the player's coordinates as a small overlay in the game. So if our cheater profession should start in the large warehouse (where else!?) the game will show us a player position of X: 3110 and Y: 1809. Unfortunately we can't use those "absolute" coordinates for the spawning code. We have to calculate the "relative" coordinates instead. Don't worry though - it is pretty easy. Basically you just need to divide the absolute coordinates by 300 to get the cells, but more importantly you have to ignore the remainder. Our coordinates for the big warehouse would be X: 10 and Y: 6 then. Now we have the cell in which the player should spawn. Relative to that position we need the exact coordinates and this is where the remainder comes into play. Still using the above coordinates the remainders of the division would be for X: 110 and for Y: 9. This probably sounds more complicated than it is. I suggest that you read through this post by The_Real_AI who maybe explains it a bit better. Now that we have calculated the coordinates, we need to tell the game to use them. -- Set custom spawn points for this profession. -- Modelled after spawn code by RegularX. Thanks to -- The_Real_Ai for his explanation on how to calculate -- them. local function initSpawnPoints() local spawn; -- Create a Spawnpoint in the large Warehouse. spawn = { { worldX = 10, worldY = 6, posX = 110, posY = 8, }, } -- Add our profession to the list of spawnpoints for Muldraugh. BaseGameCharacterDetails.spawnPoint.MuldraughKY.cheater = spawn; spawn = { { worldX = 39, worldY = 23, posX = 138, posY = 100, }, } -- Add our profession to the list of spawnpoints for West Point. BaseGameCharacterDetails.spawnPoint.WestPointKY.cheater = spawn; end Basically we have created a local table which holds our calculated coordinates and added it to the global table BaseGameCharacterDetails.spawnPoint. Take a look at the last line of the function: BaseGameCharacterDetails.spawnPoint.WestPointKY.cheater = spawn; We create a new index cheater and give it the value of our spawnpoint. It is essential that this index uses the type (check the parameters above) of your profession or else it won't work. It is probably self evident but MuldraughKY holds all spawns for Muldraugh, whereas WestPointKY creates spawns in West Point. e.) Custom Profession Clothing Finally we are going to add some custom colors for the profession clothing. The System is quite similar to the spawn points above: Basically we are going to create a table which holds all values for male and female "cheaters". ----- Set custom clothing and clothing colors for this -- profession. local function initClothing() local clothes = {} ProfessionClothing.rm_Burglar = clothes; end We create a table called clothes which will hold all of the necessary values. Then we have to make two nested tables to separate the "male" and "female" clothes (this means the guy can have blue and the lady pink colors for example - yay ). local function initClothing() local clothes = { male = { }, female = { }, } end Now we will add all the values need to create the clothes. First we declare which type of clothing item the character should wear. The male character is going to wear a Shirt and Trousers and the female character gets a Blouse and Skirt. ----- Set custom clothing and clothing colors for this -- profession. local function initClothing() local clothes = { male = { topPal = "Shirt_White", top = "Shirt", bottomPal = "Trousers_White", bottom = "Trousers", }, }, female = { topPal = "Blouse_White", top = "Blouse", bottomPal = "Skirt_White", bottom = "Skirt", }, } end You probably are wondering why there are two variables (top and topPal) for each item for example. As far as I understand the system the "pal" stuff just sets the color palette for the specific item. Why we have to do that ... I don't know It is something we gotta have to ask the devs. Last but not least we are going to give some colours to those clothes. Those values will be stored in two seperat tables called topCol and bottomCol. As you probably figured the first determines the colours of the top the character wears, whereas the latter determines the clothes for pants, skirts, etc. PZ uses the three values Red, Green and Blue (RGB) to calculate the final colour. Those values have a floating point range from 0 to 1 which was a bit strange for me at first considering that most programs and games I've used use values from 0 to 255 I will leave it to you to figure out which values return which colour. In my example here all clothes will be black: ----- Set custom clothing and clothing colors for this -- profession. local function initClothing() local clothes = { male = { topPal = "Shirt_White", top = "Shirt", bottomPal = "Trousers_White", bottom = "Trousers", topCol = { r = 0.1, g = 0.1, b = 0.1, }, bottomCol = { r = 0.1, g = 0.1, b = 0.1, }, }, female = { topPal = "Shirt_White", top = "Shirt", bottomPal = "Trousers_White", bottom = "Trousers", topCol = { r = 0.1, g = 0.1, b = 0.1, }, bottomCol = { r = 0.1, g = 0.1, b = 0.1, }, }, } ProfessionClothing.cheater = clothes end Just like the spawnpoints we add the table of our cheater profession to the global table called ProfessionClothing with the last line of the function. f.) Putting it all together We still need to tell PZ to call our functions once the game boots so that our custom values are initialised. We wlll use our beloved Events for that. Add these lines to the end of your CheaterProfession.lua file: Events.OnGameBoot.Add(initTraits); Events.OnGameBoot.Add(initProfessions); Events.OnGameBoot.Add(initSpawnPoints); Events.OnGameBoot.Add(initClothing); We are done here. Congratulations you have created your first custom Profession The complete file should look like this: TOC Last updated: 12.11.2013 2. Linking Professions / Traits to game mechanics What we want to do now is link a special game mechanic to the trait of the profession we just created. Of course this isn't a must, but it doesn't make much sense to implement a trait that doesn't have any effect in the game, does it? You will see that it is actually pretty easy. Let's get to it. Coming soon™... TOC Last updated: 08.11.2013
  5. This is very similar to adding foraging zones to your map, (step 6 of this tutorial: https://theindiestone.com/forums/index.php?/topic/21951-the-one-stop-tilezed-mapping-shop/ ) Simply add the following code to your map mods' PZW file the same way as in step 6 of the above guide: <objecttype name="ParkingStall"/> <objectgroup name="ParkingStall" color="#85929e" defaulttype="ParkingStall"/> List of vehicle zone names to use in WorldEd: bad good medium sport farm junkyard trafficjams trafficjamn trafficjame trafficjamw rtrafficjams rtrafficjamn rtrafficjame rtrafficjamw police ranger fire mccoy fossoil postal spiffo radio ambulance burnt The first group is the most common type of vehicle zones used. The second group are for traffic jams pointing in specific directions to immitate the flow of traffic. The ones prefixed with r will spawn less than the regular trafficjam zones. The third group are specific zones for the type of vehicles listed, they are still also spawn random cars but will also spawn the vehicle listed. The final one will add random burn out vehicles. Vehicle zones should be placed as a multiple of 4x3 tiles (4x3, 8x6, 28x3 etc) with 4x3 being a single vehicle, 4 being its side and 3 being its front/back. You can choose any color values you want for the different zones, just make sure they are hex color codes. Once done, load your map mod up in WorldEd, open a cell and add your new vehicle zones as you would foraging zones. Whenever you add a zone you need to use the objects panel on the left of the WorldEd window to give the zone a name (use the names listed above) that will be visible in WorldEd as a tag over the zone, making it easier to keep track of what you have placed where, if these are left blank then the game will default back to grabbing random vehicles from the ParkingStall zone. Example: After you have added vehicle zones to all of your cells, save your map. Once saved, generate your lots and then write objects to lua. You now have vehicle spawns in your map. If you are having trouble with your vehicle zones, you can always take a look at the vanilla objects.lua within the muldraugh folder of your zomboid install, once opened just search for "ParkingStall" to see examples of vehicle zones used in the vanilla vehicle branch. For aligning vehicles in parking stalls: Select a ParkingStall object. In the Properties panel, click the "add" button under Templates. Choose one of the 4 ParkingStallX templates. You should see "Direction=X" where the object name is displayed. The direction controls where the front (or back) edge of each vehicle is aligned. In the picture you can see a Direction=E ParkingStall facing a Direction=W ParkingStall. This is used to ensure the vehicles don't overlap each other, and leaves space for the player (and zombies) to walk between them. For single parking stalls, there is usually no need to choose a direction. The FaceDirection property can be added to ParkingStall objects to align the front of a vehicle to the edge specified by the Direction property. When this property is "false" or isn't assigned to a ParkingStall object, the vehicle will face in a random direction as before. This can be used for parallel-parked vehicles for example.
  6. MethodThree

    The Weather Mod

    Hello survivors ! Since the last big update, the weather update, i was thinking about creating a mod that plays with the actual weather update. What i want to do, is create a mod that make the weather way more dangerous. There is a challenge that makes the weather in winter mode in July, which is a great idea. In 2018, with the climate change, weather is becoming way more extreme and this is exactly what i want to do. The thing is, im trying to read script and files about other mods but the weather files are kinda different. I want to locate how exactly the events in weather (suck as rains, snow, wind and temperature) act. So thats why i need a little help. Maybe pointing me a exact line in one of the file so i can learn and ask question as i go through my mod !? Thanks in advance !
  7. 1) First create a folder structure for your mod, call the first folder something like "MyCarReskinMod". Inside that create a "media" folder, inside your media folder create 2 more folders, one called "textures" and one called "scripts". Inside the texture folder create a folder called "Vehicles" and inside the scripts folder create a folder called "vehicles". Your final folder structure should look like: MyCarReskinMod media textures Vehicles scripts vehicles Don't forget to place your mod.info and poster.png files inside your first folder alongside the media folder. 2) Copy, paste and rename the vehicles main texture that you want to edit/reskin from the ProjectZomboid/Media/Textures/Vehicles folder to your media/textures/vehicles folder. Use this texture along with the vehicles texture mask (also found in the same folder) as a template for your skin. The vehicle mask is listed in the code snippet below ("textureMask = ...") and dictates what part of your vehicle texture gets assigned to each part of the 3d vehicle. 3) Find and copy the original script of the vehicle you want to reskin from the ProjectZomboid/Media/Scripts/Vehicles folder and paste it into your media/scripts/vehicles folder. Below is what the start of your vehicle script should look like, in this example we are editing the taxi skin: Change the line "texture = Vehicles/Vehicle_CarTaxiShell" to "texture = Vehicles/"YourVehicleSkinPNGNameHere" and save. Add your entire mod folder structure into your users/zomboid/mods folder, enable the mod on the in game mods page and play, your edited vehicle skin should now be in game. You can download an example here: RingoCarSkinEdit.zip
  8. As the title says, sometimes you want to make it quick to read the text of a sheet of paper or more specifically the post-it notes without having to right click- left click on read and wait for the windows to appear. The tooltip might not show the whole text but a portion. No need to create a whole "tooltip class object" but to reuse the existing one. I would kindly try to make a mod out of it.. But I would need some kickstarter tips Regards
  9. On YouTube I've been making tutorials of the basics of project zomboids Map editor tools. right now I am finishing up with the building editor. if I missed anything let me know and I'll make sure to make tutorial covering it here is part one for more tutorials check out my channel Doge's Creator
  10. How to start modding? is there any website where I can learn to create items? I can not find tutorials on the forum and I would like to learn. I have some nice ideas for items.
  11. Any full tile roof peice that is currently not over a room definition in your building needs a room definition. For any bits that are above an internal room, simply make sure that room has a room definition (all room in buildings should, even hallways etc). If the roof bit is over an outside area (such as a porch) then instead of giving it an internal room definition, which could possibly mess with loot tables etc, use the new room definition made for this situation - emptyoutside. In the example below you can see that this building has a porch roof outside the front door, all other bits of roof are already over a pre-existing room definition and so we don't need to worry about them. We do need to add an emptyoutside room definition on/under the porch roof however as there currently is no room definition outside the building. In this example, the porch roof is on the roof layer of floor 2. If we check Ortho view you can see that a room definition of emptyoutside yellow) has been applied to the corrosponding tiles on floor 2. Once applied, simply save the building and move on to the next. Once all buildings are done, close buildingEd and open your map in WorldEd, generate lots and you're done, your map should now support the new roof occlusion system! If you're having problems getting it to work properly, remember: every "full tile" roof peice (the little overhang peices you see in the example above do not need to adhere to this rule, just leave them as is if you have any) must be "over/on" a room definition, so make sure every room in your buildings has a room definition (including hallways etc). Add a room definition of "emptyoutside" (without " ") to any full tile roof peices that do not sit "over/on" an internal room definition. Make sure to generate lots in WorldEd once all of your relevant buildings have been updated.
  12. I suggest adding a method that will allow us to load skinned mesh in game! I replaced the original models of clothes, and it looks good. But unfortunately adding them without replacing the original is impossible, since there is no skinned model load method. :(( Class LuaManager.GlobalObject has a method that allows loading a static model, but it does not allow upload skinned model, because it sends boolean true to ModelLoader.instance.Load
  13. Hey guys I need some help with TileZed's BuildingEd. I just finished a cool building that I worked so hard on, saved it and everything, didn't click on anything out of the ordinary. When I went to WorldEd, I clicked on my building, didn't show a preview image. When I dragged it out onto my Cell, it didn't show a building, neither did it plop a building when I placed it on my map itself. Then I went to BuildingEd to see if I messed something up, and instead I got an error saying, "Error Reading Building - Invalid Object Coordinates (1, -3 Line 2209, Column 72". What does this mean and how can I fix it without having to remake my whole tower? THANK YOU! My building's png is still in one of the .pzeditor folders, so idky it won't show in WorldEd or let me edit it either in BuildingEd.
  14. Type = Normal,There are various types of items in Project Zomobid, below you will se each of them with a short description. Normal – A basic item. Drainable – An item that has a certain amount of uses before it's destroyed Food – An item that can be consumed by the character Weapon – An item that can serve as an equpable weapon. Container – An item that can store other items inside it. Clothing – Item worn by the player character. Literature – A readable item like a book or a newspaper. Weight = 1,The weight of an item as seen in-game, it should be a sum of weight + size of the item.Typically used in Item Type: All DisplayName = Example item,Defines the name of the item as displayed in gameTypically used in Item Type: All Icon = ItemIcon,Defines the icon the item will have in-game, the .png file of the icon should be in media/textures folder of the mod and the name must look like this Item_ItemIcon.pngTypically used in Item Type: All UseDelta = 0.1,Defines how many uses a Drainable item has, if it's 0.1 the item will have 10 uses before it's depleted.Typically used in Item Type: Drainable Capacity = 20,Defines the maximum carrying capacity of the container.Typically used with item Type: Container CanBeEquipped = Back,Defines the clothing slot the item is equipped in, typically only used for containers in the form above. BodyLocation = Bottoms,Defines what part of the body a Clothing item is worn on. Can be Bottoms, Shoes or Top Temperature = 8,Defines the temperature resistance a Clothing item gives to the player when worn. CanStoreWater = TRUE/FALSE,Defines if the item can be used to store water. Defaults to FALSE if not used.Typically used in Item Type: Drainable IsWaterSource = TRUE/FALSE,Defines whether or not the item is a source of water. Defaults to FALSE if not used.Typically used in Item Type: Drainable UseWhileEquipped = TRUE/FALSE,Defines if the items has to be equipped in Primary or Secondary slot in order to be used. Defaults to FALSE if not used. ReplaceOnDeplete = Module.ItemID,When the item is depleted (Has no uses left or if you've eaten\drank all of it) it will be replaced by Module.ItemID ReplaceOnUseOn = WaterSource-WaterBottleFull,If the item is used on something it will turn into something else, in the case above, if used on a Water Source (Item\Water Barrel\River) it will become WaterBottleFull IsCookable = TRUE,Defnises whether or not the item can be Cooked using Fire Pits, Stoves or BBQ. If the item is cookable and stores water, it can be used to boil it to remove the tainted water effect. Defaults to FALSE if not used. DangerousUncooked = TRUE,If TRUE, eating the food item without cooking will result in it having a semi-poisonous effect. HungerChange = -20,Defines how much hunger will be removed upon consumption, if the value is Positive, consuming the item will make the character more hungry. ThirstChange = -20,Defines how much thirst will be removed upon sonsumption, if the value is Positive, consuming the item will make the character more thirsty. StressChange = -20,Defines how much stress will be removed upon sonsumption, if the value is Positive, consuming the item will make the character more stressed. UnhappyChange = -20,Defines how much happiness will be removed upon sonsumption, if the value is Positive, consuming the item will make the character more unhappy. BoredomChange = -20,Defines how much boredom will be removed upon sonsumption, if the value is Positive, consuming the item will make the character more bored. FatigueChange = -20,Defines how much fatigue will be removed upon sonsumption, if the value is Positive, consuming the item will make the character more tired. EnduranceChange = 20,Defines how much endurance will be removed upon sonsumption, if the value is NEGATIVE, consuming the item will make the character more fatigued. Alcoholic = TRUE,If TRUE consuming the item will make the character drunk. If used for Bandage items, it will act as disinfectant. DaysFresh = 6,Defines the amount of days before a food item starts to rot. DaysTotallyRotten = 10,Defines the amount of days before the food item rots completely, becoming poisonous. MinutesToCook = 40,In-Game Minutes before the item is cooked, use with Cookable = TURE, MinutesToBurn = 110,In-Game Minutes of Cooking the item before it becomes Burned. Poison = TRUE,Defnines if the item is poisonous upon consumption. PoisonDetectionLevel = 1,Unknown, probably defines the difficulty of detecting poison if used in Evolved Recipe. PoisonPower = 5,Defines the power of poison, the higher the value, the more lethal it is upon consumpion. 5 Is PoisonIvy (White Berry) 45 is Bleach level. UseForPoison = 1,Unknown, possibly amount of PoisonPower goes into Evolved Recipes. FoodType = Fruits,Unknown, no known use as of Build 32 AlwaysWelcomeGift = true,Unknown, no known use as of Build 32 CustomContextMenu = Take,Will replace "Eat" text in the context menu for food items. EvolvedRecipe = Stew:3;Pie:3;Soup:3;Sandwich:3;Salad:3;Roasted Vegetables:3,Item can be used in Evolved Recipes, in the above case, it could be used in Stew, Pie, Soup, Sandwitch and so on... DisplayCategory = Ammo,Will be displayed as the item's category, can be anything but custom Categories need a Translation file. CanBandage = true,If TRUE the item can be used as a Bandage for wounds. BandagePower = 4,Defines how good a bandage is, higher values make the bandage last longer before it goes Dirty. ReduceInfectionPower = 50,If used, it will reduce infection (NOT Zombie Infection, it reduces regular wound infection, it might slow down zombie infection though, uncofirmed) Tooltip = Tooltip_UseOnHealthPanel,Will display tooltip if item is moused over in inventory, requires Translation file that defines the text to display. Known Preset Tooltips: Tooltip_Painkillers,Tooltip_PillsAntidepressant,Tooltip_PillsBetablocker,Tooltip_PillsSleeping,Tooltip_tissue_tooltip,Tooltip_IronSight,Tooltip_Scope,Tooltip_AmmoStrap,Tooltip_Sling,Tooltip_FiberglassStock,Tooltip_RecoilPad,Tooltip_Laser,Tooltip_RedDot,Tooltip_ChokeTubeFull,Tooltip_ChokeTubeImproved,Tooltip_Trap,Tooltip_Generator,Tooltip_UseOnHealthPanel,Tooltip_Vitamins, RequiresEquippedBothHands = TRUE,If TRUE the item HAS TO be equipped in Both Hands in order to even be carried. TeachedRecipes = Make Bread Dough,If Read the item will teach the character how to make Bread Dough, any Recipe name can be used.Typically used with Literature NumberOfPages = 260,Defines the number of pages a Skill Book has.Typically used with Literature Skill Books SkillTrained = Trapping,Defines what skill the Skill Book gives a multiplier to. LvlSkillTrained = 3,Minimum skill level required to read the skill book. NumLevelsTrained = 2,Amount of skill levels the multiplier will apply to beginning with LvlSkillTrainer. CanBeWrite = true,If TRUE the item can be used to write on if the character has a Pencil or Pen Weapon Type Only Below: MELEE/RANGED WEAPONS MinRange = 0.61, Defines the minimum range at which the weapon is effective, if the target is closer, he will be pushed away. Possibly 1 = 1 tile. MaxRange = 1.5,Defines the maximum range at which the weapon is effective. Possibly 1 = 1 tile. WeaponSprite = Fireaxe,Defines the weapon model used. MinAngle = 0.2,Unsure, defines the angle at which the weapon is effective. HitAngleMod = -30,Unsure, as above. SwingTime = 3.0,Defines the default time it will take for the swing animation to play out. MinimumSwingTime = 3.0,Defines the minimum time it will take to swing the melee weapon, affects the speed of animation and DPS. KnockBackOnNoDeath = TRUE,If TRUE the weapon will knock back the target if the strike was not lethal. SwingAmountBeforeImpact = 0.002,Defines the time from start of the swing before it makes an impact. Categories = Axe,Defines the weapon Category. Can be Blunt, Blade, Axe, Improvised, Unarmed SubCategory = Swinging,Defines the weapon Sub Category. Can be Swinging, Stab, Firearm ConditionMax = 15,Defines the maximum durability of the weapon. ConditionLowerChanceOneIn = 30,Defines the chance for weapon condition to lower when used. SplatNumber = 1,Unsure, Possible affects how many blood splats comes out after impact. SplatSize = 5,Unsure, possible affects how much blood comes out with each splat. SplatBloodOnNoDeath = TRUE,Defines whether or not blood comes out if the strike was not lethal. PushBackMod = 0.3,Modifies the strength with which the target is pushed back upon impact. MinDamage = 1,Defines the minimum damage. MaxDamage = 2.5,Defines the maximum damage. MaxHitCount = 2,Defines how many targets can be hit with a single attack. DoorDamage = 35,Defines the amount of damage done to doors. Doors have 100 HP by default. TreeDamage = 35,Defines the amount of damage done to trees. Trees have 100HP by default. IdleAnim = Idle_Weapon2,Defines the idle animation that plays when the character is holding the weapon. SwingAnim = Bat,Defines the swinging animation that plays when the weapon is used RunAnim = Run_Weapon2,Defines the animation that plays when the character runs with the weapon. CriticalChance = 20,Chance to inflict critical, lethal damage upon the target. WeaponWeight = 3,Higher values cause exertion faster. KnockdownMod = 2,Defines the knockdown modifier, higher values mean it will be easier to knock the target down. TwoHandWeapon = TRUE,If true the weapon will be most effective if equipped in both hands. CloseKillMove = Jaw_Stab,Defines the type of close kill move, used for knives and some other stabbing weapons only. CantAttackWithLowestEndurance = TRUE,If TRUE the weapon can't be used if the character is under Extreme Exertion moodle. EnduranceMod = 0.5,Modifies the amount of endurance used up when swinging the weapon. Higher values mean exertion comes on faster. Weapon Type Only Below: RANGED SPECIFICRanged weapons will use a lot of variables, if not all, used by melee weapons, below you will find variables specific for Ranged Weapons, they would probably all work with a melee weapon, you can experiment. AmmoType = BerettaClip,Defines the type of Ammo being used. To the best of my knowledge, reloading requires .lua code. ImpactSound = null,Defines the sound created after impact. SwingSound = 9mmShot,Defines the attack sound. SoundVolume = 75,Defines the volume of attack sound. ToHitModifier = 1.5,Unsure, possibly a modifier for a chance to hit the target. NPCSoundBoost = 1.5,Unknown. No use as of Build 32. Speculated boost to sound if used by NPC so more zombies hear it and come. Ranged = TRUE,Defines if the weapon is a ranged weapon. ProjectileCount = 1,Defines the amount of projectiles created by shooting the weapon. ShareDamage = FALSE,Unknown effect. IsAimedFirearm = TRUE,Defines if the weapon needs to be aimed. UseEndurance = FALSE,Defines if using the weapon uses up endurance. MultipleHitConditionAffected = FALSE,Unknown. SoundRadius = 150,Defines the sound radius, higher values cause more zombies to hear it from more far away. AimingPerkCritModifier = 10,Defines Aiming Skill Bonus to Critical Chance AimingPerkRangeModifier = 1.5,Defines Aiming Skill Bonus to Range. HitChance = 45,Default chance to hit the target. AimingPerkHitChanceModifier = 15,Defines Aiming Skill Bonus to Hit Chance. AimingPerkMinAngleModifier = 0.05,Defines Aiming Skill Bonus to Min Angle. RecoilDelay = 20,Unsure. Defines time that must pass between shots. SoundGain = 1.5,Unknown effect. ClipSize = 15,Maximum amount of ammo that can go into the weapon. Again, .lua code is required for the weapon to be re loadable. ReloadTime = 10,Defines the time needed for the weapon to be reloaded. AimingTime = 40,Defines Aiming Difficulty, lower values increase chance to hit with low aiming time. PiercingBullets = TRUE,If true, multiple objects can be hit by a single projectile if they are in the right angle. Weapon Type Only Below: THROWN SPECIFIC UseSelf = TRUE,If TRUE the item itself will be used up when attacking. PhysicsObject = Aerosolbomb,Defines the thrown item sprite. ExplosionPower = 70,Defines the power of the explosion created upon impact. ExplosionRange = 6,Defines the AoE of the explosion. FirePower = 97,Defines the amount of fire that will be created upon impact. FireRange = 6,Defines the AoE of fire. triggerExplosionTimer = 50,Defines the time before exlosion if placed. ExplosionSound = smallExplosion,Defines the sound of explosion. PlacedSprite = constructedobjects_01_32,Defines sprite used if the weapon is placed as a trap. I hope this helps anyone who wants to create their own items for PZ. Remember, this is just a list of variables, don't use all of them, it's not required. Take a look at items.txt and newitems.txt to see what variables are used by what items and base your items off that.
  15. Hello to anyone who's reading this. I'm working with Neutz on the Union City map. We'll release a part of it once the Suburban Area is done. What I need from each one of you is an idea for buildings, it can be a shop, a gas station, (no more house ideas, please, unless you made some and want to share them, my brain is mush as this moment from making 200+ houses already) warehouses, small clinics, pet shops, you name it. I just need building ideas. If you want to give some buildings for the upcoming map you're more than welcome to do so. If you want to give ideas, give a small description or a list of the buildings, if you can, provide a picture if you want something custom which I could try and make. Thanks to anyone who'll be writing below, be sure to check the Union City thread, we'll keep you posted weekly (if we don't forget from time to time ._.) on the upcoming map progress.
  16. Download and install CartoZed from here: https://theindiestone.com/forums/index.php?/topic/21633-cartozed/ Follow the instructions in the above thread to create a top down image of your map mod (or any map mod), I created a copy of and renamed the default theme and removed all the trees, vegetation and walls options within to create the look I wanted for my map. Try it yourself, create a new theme and add/remove or edit different options to create different looks. Next, create the following file structure (if you are adding the lootable map to your own map mod then create all folders within the media folder below in your map mods media folder instead): Spoiler MyLootableMapsMod >media >>lua >>>server >>>>Items >scripts >ui >>LootbaleMaps Once you have finished editing your lootable map image you extracted using CartoZed (I simply copy and pasted one of the keys from one of the official lootable maps found in "steamapps\common\ProjectZomboid\media\ui\LootableMaps" and then area filled each building the corresponding colour) save it in your LootbaleMaps folder as a png file with a name like "MyLootableMap" or "FictitiousTownMap" etc. Next up create a .txt file in the scripts folder called something like "mylootablemap" (except make it more unique to avoid any possible compatability issues with other mods that might use the same names), it should include this code: Spoiler module Base { item MyLootableMap { Type = Normal, DisplayName = Your map name here, Icon = Map, Weight = 0.1, Map = media/ui/LootableMaps/MyLootableMap.png, } } The above code is adding a new item with the internal name "MyLootableMap" (so again make sure your's is something unique) into the vanilla pool of items, the above settings work for maps, just make sure the "Map = " line is pointed to your lootable map png. The last file you need you will want to create in the "media\lua\server\Items" folder, call it something like MyLootableMapDistribution.lua but again make it's a unique name to avoid any possible mod imcompatability with other mods. It should contain the following code: Spoiler require 'Items/SuburbsDistributions' table.insert(SuburbsDistributions["fossoil"]["shelvesmag"].items, "Base.MyLootableMap"); table.insert(SuburbsDistributions["fossoil"]["shelvesmag"].items, 2); table.insert(SuburbsDistributions["all"]["shelvesmag"].items, "Base.MyLootableMap"); table.insert(SuburbsDistributions["all"]["shelvesmag"].items, 0.5); In the above code you can see that we are adding our new Item "MyLootableMap" into the "shelvesmag" containers within the "fossoil" and "all" room definitions. The numbers 2 and 0.5 govern the likelihood of a map spawning in said containers, higher being more likely. To find the current room and container definitions, navigate to your "steamapps\common\ProjectZomboid\media\lua\server\Items" folder and open the Distributions.lua file. And that's it, copy your entire folder structure into your "C:\Users\YourUserNameHere\Zomboid\Mods" folder, load up the game, enable the mod (Your map mod if you made your lootable maps as part of a map mod) and start a new game, you now have your lootable map in game and waiting for you to find. If you need a working example you can always subscribe to Bedford Falls on Steam and check it's workshop folder "steamapps\workshop\content\108600\522891356" . It's handy to verify your folder/file structure etc if you're having problems.
  17. This is mainly for Single Player use as you can use the "mods=" for server setups. Also on Steam: http://steamcommunity.com/sharedfiles/filedetails/?id=944054233 First you want to subscribe to and/or download the maps that you want to combine. If you subscribe using Steam you will find the downloaded mods in your "Steam\steamapps\workshop\content\108600" folder, each mod with its own unique id number (for example Bedford Falls is 522891356). Now you want to create the following folder structure (on your desktop): Spoiler MyCombinedMaps media maps MyCombinedMaps Now, inside the first folder, alongside the media folder, you want to place a mod.info file and a poster.png file, you can create your own from scratch, but it's easier to copy them from one of the map mods (e.g, from the "steamapps\workshop\content\108600\522891356\mods\Bedford Falls" folder) and edit them to suit your needs. The mod.info should look like the following: Spoiler name=My Combined Maps id=MyCombinedMaps description=This adds multiple map mods together for use in Single Player poster=poster.png The poster.png file should be a 256x256 image, you can make your own using paint etc or simply use one from one of the map mods you downloaded. Now, for each map mod you would like to combine, navigate to its map data folder (e.g, "steamapps \workshop\content\108600\522891356\mods\Bedford Falls\media\maps\BedfordFalls") and copy across all of the ".lotheader", ".bin" and ".lotpack" files to your own map data folder ("MyCombinedMaps\media\maps \MyCombinedMaps"). Be careful when adding any maps that have cells that overlap, add the map you want be "on top" last. Once done, copy across the "map.info", "objects.lua", "spawnpoints.lua", "spawnregions.lua" and "thumb.png" from ONE of the map mods to the same folder as the files above. Rename the spawnpoints.lua file to something like bedfordspawns.lua or denverspawns.lua depending on the map. Now copy the rest of the spawnpoints.lua files from each map and rename them to something relevant too. Your map data foler should now have multiple "*spawns.lua" (one for each map) files alongside all the rest of the map files (".bin", ".lotheader", ".lotpack" etc). The next thing you need to do is add the objects.lua data from each other map to the one you copied into your map data folder. For each one, open using notepad and copy/paste everything after "objects= {" up to but not including the final "}" in the file, into the objects.lua already in your map data folder, after the final entry but before the final "}". Next, edit the map.info file to: Spoiler title=My Combined Maps lots=Muldraugh, KY description=Adds multiple map mods to the vanilla world The last file you need to edit is the spawnregions.lua file (some maps may not include one of these, but you can easily make your own too), you will need to add/edit entries to point to the "*spawns.lua" files you renamed, it should end up looking somehting like: Spoiler function SpawnRegions() return { { name = "Muldraugh, KY", file = "media/maps/Muldraugh, KY/spawnpoints.lua" }, { name = "West Point, KY", file = "media/maps/West Point, KY/spawnpoints.lua" }, { name = "Rosewood, KY", file = "media/maps/Rosewood, KY/spawnpoints.lua" }, { name = "Bedford Falls", file = "media/maps/MyCombinedMaps/bedfordspawns.lua" }, { name = "New Denver", file = "media/maps/MyCombinedMaps/denverspawns.lua" }, } end This will give you the option of spawning at any of the map mods (or vanilla games) spawn options after selecting your combined mod on the world select screen. All that is left to do now is copy your entire folder structure into your "C:\Users\YourUserName\Zomboid\mods" folder. Now you can load up the game, enable your mod, start a new game, select your combined mod and then spawn in a town of your choice. Some map mods will also come with additional folders inside of their "media" folder, alongside the maps folder, it's important to also copy these across to your combined mods "media" folder as they will be adding things such as lootable maps, additional items/recipes etc. Here's a working example that combines Bedford Falls and Fetzington into a single mod: http://www.filedropper.com/bedfetz_1 (Should only be used as an example as it will become outdated as soon as a new version of Bedford Falls or Fetzington are released).
  18. I tried with some codes but not working local Player = getSpecificPlayer(0); local Item = Player:getPrimaryHandItem(); if (instanceof(Item, "Food") and Item:getType() == "Bass") then if Item ~= nil and Item:IsRotten() then luautils.okModal("YES", true); else luautils.okModal("NO", true); end end --SOLVED!!!!
  19. Modding Rules & Guidelines The Subforums and their purpose Tutorials & Resources: Tutorials and Tools for modding Project Zomboid should be posted here. Please do NOT ask for help in here. MODS: Gameplay Mods that are in a playable state and mostly bug free, but may still have added more features in the future. WIP: Unfinished mods that are being worked on and open to be tested. HELP: If you seek help with modding Project Zomboid this is the right place to ask. ITEMS: All mods that add or alter items. WIP: Unfinished mods that are being worked on and open to be tested. HELP: Ask here if you need help with the scripting functionality of PZ. MAPPING: All mods that add new maps, or alter the existing one. BUILDINGS: Finished .lots belong here. WIP: Unfinished maps / lots that are being worked on. HELP: Ask here if you need help with anything related to mapping. Mod Requests: Do you have an awesome idea waiting to be turned into a mod? This is the right place for you. Guidelines Pick an useful title for your topic that describes your mod. I suggest using the mods name. Add some tags that describe your mod so that it can be found via the forum-search. You should enter the current version of Project Zomboid in the tags and click "use first tag as prefix". Your topic will appear like this in the list now. It also can be easier found with the forum-search function. Try to describe your mod as close as possible. People won't download it, as long as they don't know what it does. If you can, add some screenshots or even better a video which shows the main features of your mod. Rules Only post content you created or have permission to use (with evidence). Ad revenue links are ONLY allowed if you also provide a direct link to the download. Don't upload mods / tools that have the purpose to damage savegames or make the game unplayable. Don't upload mods that contain racist, hateful, or otherwise objectionable content. Whether the content is "objectionable" is up to the admins. Bumping your own threads is only allowed to advertise a new version, or to share important information, not to constantly appear on top of the list. Don't create threads devoid of content, such as "Something's coming soon"or "I'm going to do this!" Describe your mod and give us something to discuss. Modding Terms and Conditions By modding in Project Zomboid, you accept the following: You are allowed to edit the game in any way, providing you do not edit it in such a way that it is either intentionally damaging to people's PCs, or removes the login system and enables people to play the game without purchasing. Indie Stone reserve the right to implement any features in the game irrespective of whether mods exist that accomplish the same goal. While we will respect people's personal creations and always ask for permission and offer credit within the game before intentionally including any code, art or dialogue directly from mods with the core game, we do this out of respect to the authors and are not legally obliged, and general game-play ideas themselves do not apply (although again, we will be responsible when it comes to giving informal credit should ideas be used directly based on mods). We say this only to protect ourselves from the potential for mods to beat us to features we already intended to add and then having the origin of that idea disputed. Unless any arrangements to the contrary have been made, mod creators cannot sell modifications to the game. Likewise, upon allowing us to use a modification in the game you cannot claim entitlement to any past, current or future profits from the game unless this is agreed upon at the time. Project Zomboid modders are free to receive monetary/gift donations from the players who use their releases, and appreciate the time and effort put into them. However having mods created exclusively for those who choose to donate (or separate ‘in-mod’ content and bonuses) is not allowed. Mod creators cannot sell modifications to Project Zomboid.
  20. The html code "<br>" works really good on translation tooltips. Adding colors codes can be a really good thing for modding, adding directly on translate txt. Like this example: Tooltip_EN = { Tooltip_Pliers = "<RGB:1,0,1> Can be used to trap a rat.", } Or maybe adding directly to scripts.txt Like this example: Tooltip = <RGB:1,0,1>Tooltip_Pliers, Sorry about my language i speak spanish.
  21. So i thought if someday devs would consider creating some kind of tool to make modding easier to do. I don't talk about very very user friendly etc. but just slightly easier by categorazing stuff without searching and doing things through trial and error etc. We got recently a upgraded and very good tool to make maps and stuff so i just thought that some tool to make modding easier would be very nice too. I know that there like 123012301 things much more important atm but it would be very useful to help people in communnity to contribute something just like with map tool.
  22. I am making a mod that shows zombie and player locations on PZ Server map project. This requires some alterations of both game and the map. Currently it looks like this and uses JSON to transfer all zombie locations at once: I would rather stream the zombies and their location continuously through event-driven model, ideally in a separate thread. Currently I'm just gonna replace the original zombie registry ArrayList with my overridden ArrayList implementation that registers adding and removal of the zombies. But that doesn't deal with zombie locations.
  23. In the /media/sound/banks/Desktop there are several .bank files. Typically when confronted with unknown files, I try to open then with 7zip, but this didn't work out for those files. What's the format of the files and how to properly alter their contents?
  24. After a long time away from PZ, I've returned to the game and am loving all the new improvements since I last played! I've of course been equally excited to get back into modding again. I have been re-creating my old outdated mods such as my new professions, but I've hit upon something I never could figure out last and wanted to finally ask: If I want to assign an existing trait (e.g. Graceful) to be given 'free' by a profession, this works fine except that the player can 'remove' that trait if they want to. This is to be expected; these traits weren't designed to be exclusive to a profession. Of course, this is visually ugly (duplicate traits in trait list) and not really the designed functionality. The answer, I would have thought, would be to create a 'duplicate' of the desired existing trait (e.g. "Poised" for "Graceful") and set as an exclusive profession-only trait with a 0 point cost. Makes sense to me! Except... how *do* I duplicate the functionality of an existing trait, such as Graceful or Light Eater or Brave? Unlike the simple traits that increase skill points, I can't find the "mechanics" of these traits anywhere in the game's files (lua or otherwise). In other words, if I make my own "Eats Less" trait, how do I make sure it has the same game effect as selecting "Light Eater"? Presumably, there's some code somewhere that does some sort of "if has this trait, do X" but the place to find this is a total mystery to me, hence I have no idea how to code my own such traits! If any experts here could even just point me in the right direction, I'd really appreciate it!
  25. Hi. Just wonder: how can i replace an item stats or modify scripts without needing to change original game files, so my replacements won't be affected by unavoidable updates in most cases? I want to create a separate mod (separate files) with overwriting original content (witch priority is higher: original file records or mod file records). Is this possible at this moment or planned?
×
×
  • Create New...