leon2356 70 Posted March 18, 2020 Posted March 18, 2020 (edited) Hi. I am a super new to modding PZ and wanted to try to make some custom professions using this framework but for some reason no matter what i do it won't work. I downloaded this framework from the github link unzipped it and put it on my mod folder then I tried make my profession based of the examples in the PFW folder formatted it like a mod and put it in the mod folder. I activated my mod and the PFW mod, but it won't showup in character creation. Can you take a look at my code and tell me what I am doing wrong? addProfession('Hitter', { name = "Pinch Hitter", description="When the bases are loaded with two outs...", icon = "", cost = 0, xp = { [Perks.Fitness] = 1, [Perks.Long_blunt] = 2, [Perks.Sprinting] = 2, }, inventory = { ["Base.BaseballBat"] = 1, ["Base.Baseball"] = 1, }, }) leonProfessions.lua Edit: Also I am running the newest IWBUMS build on steam. Edited March 18, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Fenris_Wolf 292 Posted March 19, 2020 Posted March 19, 2020 None of the functions are global. you need to prefix your function call: ProfessionFramework.addProfession Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 21, 2020 Posted March 21, 2020 (edited) On 3/19/2020 at 11:41 AM, Fenris_Wolf said: None of the functions are global. you need to prefix your function call: ProfessionFramework.addProfession Sorry, I'm super new to modding when you say "prefix your function call", what do you mean exactly. You mean like this?: ProfessionFramework.addProfession('Hitter', { name = "Pinch Hitter", description="When the bases are loaded with two outs...", icon = "", cost = 0, xp = { [Perks.Fitness] = 1, [Perks.Long_blunt] = 2, [Perks.Sprinting] = 2, }, inventory = { ["Base.BaseballBat"] = 1, ["Base.Baseball"] = 1, }, }) leonProfessions.lua Because it is still not working. Edited March 21, 2020 by leon2356 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 21, 2020 Posted March 21, 2020 (edited) I tried a few other things like trying to add one of the example changes you provided with the mod: ProfessionFramework.addProfession('carpenter', { cost = 4, xp = { [Perks.Woodwork] = 4, }, inventory = { ["Base.Hammer"] = 2, ["Base.Saw"] = 1, ["Base.Woodglue"] = 3, ["Base.NailsBox"] = 3, }, square = { ["Base.Plank"] = 10, }, }) As well as the traited you provided as well: ProfessionFramework.addTrait('Nightmares', { name = "UI_trait_nightmares", description = "UI_trait_nightmaresdesc", exclude = {"Desensitized"}, cost = -4, requiresSleepEnabled = true, inventory = { ["Base.PillsBeta"] = 1, ["Base.PillsSleepingTablets"] = 1, }, OnGameStart = function(trait) Events.EveryTenMinutes.Add(function() local p = getSpecificPlayer(0) if p:isAsleep() and ZombRand(100) < 2 then p:forceAwake() p:getStats():setPanic(90) end end) end }) And neither work. Is there a special place I have to place the "profession framework mod" in? I put it in: C:\Users\User\Zomboid\mods. I also tried all this with the steam version and that did not work either. Edited March 21, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Arsenal26 116 Posted March 24, 2020 Posted March 24, 2020 I have the Framework mod in ...\Zomboid\mods\ProfessionalFramework-master I have my Profession lua in ...\Zomboid\media\lua\shared\MYPROFESSIONS.lua There is an issue with your example.... Unlike [Perks.SmallBlunt] (no space) Long is just [Perks.Blunt]... So the script stops at that mistake, and does not apply sprinting, or anything passed that line. Otherwise, I pasted your example in myprofession mod, and it appears in the setup option just fine... ProfessionFramework.addProfession('Hitter', { name = "Pinch Hitter", description="When the bases are loaded with two outs...", icon = "", cost = 0, xp = { [Perks.Fitness] = 1, [Perks.Blunt] = 2, <<<<<<===== FIX THIS SO IT READS AS SUCH [Perks.Sprinting] = 2, }, inventory = { ["Base.BaseballBat"] = 1, ["Base.Baseball"] = 1, }, }) leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 25, 2020 Posted March 25, 2020 (edited) On 3/23/2020 at 5:12 PM, Arsenal26 said: I have the Framework mod in ...\Zomboid\mods\ProfessionalFramework-master I have my Profession lua in ...\Zomboid\media\lua\shared\MYPROFESSIONS.lua There is an issue with your example.... Unlike [Perks.SmallBlunt] (no space) Long is just [Perks.Blunt]... So the script stops at that mistake, and does not apply sprinting, or anything passed that line. Otherwise, I pasted your example in myprofession mod, and it appears in the setup option just fine... ProfessionFramework.addProfession('Hitter', { name = "Pinch Hitter", description="When the bases are loaded with two outs...", icon = "", cost = 0, xp = { [Perks.Fitness] = 1, [Perks.Blunt] = 2, <<<<<<===== FIX THIS SO IT READS AS SUCH [Perks.Sprinting] = 2, }, inventory = { ["Base.BaseballBat"] = 1, ["Base.Baseball"] = 1, }, }) So, the PFM is in the same place as you have it but my profession mod in in: C:\Users\user\Zomboid\mods\leonProfessions\media\lua\shared/leonprofessions.lua When i look in "zomboid" there is no "media" file. I still tried to copy your fixed code into my file but the profession still does not show up in character creator. Edit: also I have been trying this with just my mod and the profession framework mods on and no other mods. Edited March 25, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Arsenal26 116 Posted March 25, 2020 Posted March 25, 2020 3 hours ago, leon2356 said: C:\Users\user\Zomboid\mods\leonProfessions\media\lua\shared/leonprofessions.lua When i look in "zomboid" there is no "media" file. Oh Ooops... my bad... that's correct, should have read : I have my Profession lua in ...\Zomboid\mods\MyProfessionsMod\media\lua\shared\MYPROFESSIONS.lua Random thoughts... - Are you testing on a new game ? or old save ? bcuz new mod memory may cause issues - Right version of game ? - Try disabling all mods, and re-enable them making sure PFM is activated before your custom professions mod... - Console.txt throwing any errors ? scrolling all the way up may reveal where its hanging up or unable to find something... leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 25, 2020 Posted March 25, 2020 Ok, so. - I am on version, 41.33. - I am testing it on a new save. - I have all mods off expect profession framework and my professions mod. In the load order it is "Profession framework" then my mod. - In Console.txt there is only one error "LOG : General, 1585159547880> ERROR: Missing translation "UI_Loading_Mods" I'll attach a copy of it to this post. Maybe you will see something I can't. console.txt Quote Share this post Link to post Share on other sites
Arsenal26 116 Posted March 25, 2020 Posted March 25, 2020 5 hours ago, leon2356 said: Ok, so. - I am on version, 41.33. - I am testing it on a new save. - I have all mods off expect profession framework and my professions mod. In the load order it is "Profession framework" then my mod. - In Console.txt there is only one error "LOG : General, 1585159547880> ERROR: Missing translation "UI_Loading_Mods" I'll attach a copy of it to this post. Maybe you will see something I can't. console.txt 94.87 kB · 0 downloads Ok, so PFM is loading just fine... but your leonprofessions mod is not getting loaded.... New professions should appear immediately after the console line : LOG : General, 1585178807101> ProfessionFramework.INFO: Adding Trait Jogger2 And be at the BOTTOM of the list in game character setup screen... I did notice that there is an issue with examplemod refusing to load... Are you sure you setup your leonProfessions mod correctly ? ie, mod.info file in your leonProfessions folder... Might wanna look there bcuz its trying to load "examplemod" and failing, and there is no sign of "leonprofessions" trying to load at all... leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 26, 2020 Posted March 26, 2020 (edited) 21 hours ago, Arsenal26 said: Are you sure you setup your leonProfessions mod correctly ? ie, mod.info file in your leonProfessions folder... OH GOOOOOOOD LOOOOORRRRRD!!!!! That fixed it... I forgot to change the mod id in mod.info because all I did was copy and paste the mod.info from the example mod over. You are my hero! Just Loaded it up and now I can see the profession. I'm now a modder, YAY! Edit: Is there anywhere I can see where the names of "perks" are so I don't have a repeat of the long blunt fiasco? Edited March 26, 2020 by leon2356 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 26, 2020 Posted March 26, 2020 (edited) @Fenris_Wolf So now that i got this working I think I found a bug? When I try to add [perks.Tailoring] to my profession, the profession does not load. but if I remove it it works perfectly. Also I saw that the sewer trait is missing from default_traits.lua. Edited March 26, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Fenris_Wolf 292 Posted March 28, 2020 Posted March 28, 2020 On 3/26/2020 at 12:52 PM, leon2356 said: So now that i got this working I think I found a bug? When I try to add [perks.Tailoring] to my profession, the profession does not load. but if I remove it it works perfectly. Also I saw that the sewer trait is missing from default_traits.lua. PF knows nothing about individual perks. If adding it to your profession causes a error, then its going to be due to a typo on your end (ie: [perks.Tailoring] vs [Perks.Tailoring]. Need to keep your eye on the console.txt, since any errors will show up there, and will often let you know exactly where you've gone wrong. defaults_traits.lua is just a example file atm and not actually used anyways. Its missing from there since I haven't had time to work on the mod since before tailoring was introduced. leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 28, 2020 Posted March 28, 2020 (edited) 4 hours ago, Fenris_Wolf said: PF knows nothing about individual perks. If adding it to your profession causes a error, then its going to be due to a typo on your end (ie: [perks.Tailoring] vs [Perks.Tailoring]. Need to keep your eye on the console.txt, since any errors will show up there, and will often let you know exactly where you've gone wrong. Yep you were right. I did a copy and paste and it works now mb sorry. Thanks for the help love your mod! I do hope you get the chance to work on it some more and add the other traits it is missing. Edited March 28, 2020 by leon2356 Fenris_Wolf 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 30, 2020 Posted March 30, 2020 (edited) Just released my first full mod! Get a job! https://steamcommunity.com/sharedfiles/filedetails/?id=2040632854 Thanks again for making profession framework. Had a lot of fun making my mod and I made sure to credit you! If you want I can friend you on steam and credit you as a co-creator. Now I just got to learn how to make traits. Edited March 30, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Dr_Cox1911 286 Posted March 30, 2020 Posted March 30, 2020 (edited) @leon2356Will try it out! I have one small suggestion though, you should add the profession framework as a dependency for your workshop mod, so that if people subscribe to your mod they automatically get PFM. @Fenris_WolfShould I bump the version on the workshop? Edited March 30, 2020 by Dr_Cox1911 leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted March 30, 2020 Posted March 30, 2020 (edited) 9 hours ago, Dr_Cox1911 said: @leon2356Will try it out! I have one small suggestion though, you should add the profession framework as a dependency for your workshop mod, so that if people subscribe to your mod they automatically get PFM. @Fenris_WolfShould I bump the version on the workshop? @Dr_Cox1911 I tried my mod with the version on steam and it does not work. You need the github version for it to work. When the version on steam updates i will test it and if it works I'll add it as a dependency. Edited March 30, 2020 by leon2356 Quote Share this post Link to post Share on other sites
jUG05 0 Posted March 30, 2020 Posted March 30, 2020 I am so sorry but, how do I install this? Quote Share this post Link to post Share on other sites
WATTO 0 Posted May 12, 2020 Posted May 12, 2020 On 3/26/2020 at 11:35 AM, leon2356 said: OH GOOOOOOOD LOOOOORRRRRD!!!!! That fixed it... I forgot to change the mod id in mod.info because all I did was copy and paste the mod.info from the example mod over. You are my hero! Just Loaded it up and now I can see the profession. I'm now a modder, YAY! Edit: Is there anywhere I can see where the names of "perks" are so I don't have a repeat of the long blunt fiasco? Hi PZ community!!! Can you please let me know where I can find this info (Is there anywhere I can see where the names of "perks" )? Thanks, I hope you are well. Quote Share this post Link to post Share on other sites
Dr_Cox1911 286 Posted May 14, 2020 Posted May 14, 2020 @WATTOThose are the perks for the current stable build 40.43: Quote None(0), Agility(1), Cooking(2), Melee(3), Crafting(4), Fitness(5), Strength(6), Blunt(7), Axe(8), Sprinting(9), Lightfoot(10), Nimble(11), Sneak(12), Woodwork(13), Aiming(14), Reloading(15), Farming(16), Survivalist(17), Fishing(18), Trapping(19), Passiv(20), Firearm(21), PlantScavenging(22), BluntParent(23), BladeParent(24), BluntGuard(25), BladeGuard(26), BluntMaintenance(27), BladeMaintenance(28), Doctor(29), Electricity(30), Blacksmith(31), MetalWelding(32), Melting(33), Mechanics(34), MAX(35); leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted December 11, 2020 Posted December 11, 2020 Hi, So I use this mod as a requirement for a mod i made on steam, and one of the users found a bug where if you make a custom trait, using PFM. Then, try to save that trait in a loadout. The trait will not be be in the loadout when you load it, and you will have to re add the trait everytime you load the loadout. Quote Share this post Link to post Share on other sites
leon2356 70 Posted December 21, 2020 Posted December 21, 2020 (edited) Hi. I got a question. If i wanted to make a trait like Axeman, but, make it for something like baseball bats, or handguns. How would I go about doing that? Is there anywhere i can see how axeman is coded. From that i can reverse engineer it to work for other weapons. Edited December 21, 2020 by leon2356 Quote Share this post Link to post Share on other sites
Dr_Cox1911 286 Posted December 22, 2020 Posted December 22, 2020 @leon2356I quickly skimmed through the sourcecode and found a couple of mentions of Axeman. Don't know if these are all of them though: IsoGameCharacter.class protected float calculateCombatSpeed() { float f = 1.0F; HandWeapon handWeapon = null; if (getPrimaryHandItem() != null && getPrimaryHandItem() instanceof HandWeapon) { handWeapon = (HandWeapon)getPrimaryHandItem(); f *= ((HandWeapon)getPrimaryHandItem()).getBaseSpeed(); } WeaponType weaponType = WeaponType.getWeaponType(this); if (handWeapon != null && handWeapon.isTwoHandWeapon() && getSecondaryHandItem() != handWeapon) f *= 0.77F; if (handWeapon != null && this.Traits.Axeman.isSet() && handWeapon.getCategories().contains("Axe")) f *= getChopTreeSpeed(); f -= getMoodles().getMoodleLevel(MoodleType.Endurance) * 0.07F; f -= getMoodles().getMoodleLevel(MoodleType.HeavyLoad) * 0.07F; f += getWeaponLevel() * 0.03F; f += getPerkLevel(PerkFactory.Perks.Fitness) * 0.02F; f *= Rand.Next(1.1F, 1.2F); f *= this.combatSpeedModifier; f *= getArmsInjurySpeedModifier(); if (getBodyDamage() != null && getBodyDamage().getThermoregulator() != null) f *= getBodyDamage().getThermoregulator().getCombatModifier(); f = Math.min(1.6F, f); f = Math.max(0.8F, f); if (handWeapon != null && handWeapon.isTwoHandWeapon() && weaponType.type.equalsIgnoreCase("heavy")) f *= 1.2F; return f * GameTime.getAnimSpeedFix(); } public float getChopTreeSpeed() { return (this.Traits.Axeman.isSet() ? 1.25F : 1.0F) * GameTime.getAnimSpeedFix(); } HandWeapon.class public float getSpeedMod(IsoGameCharacter paramIsoGameCharacter) { if (this.ScriptItem.Categories.contains("Blunt")) { int i = paramIsoGameCharacter.getPerkLevel(PerkFactory.Perks.Blunt); if (i >= 10) return 0.65F; if (i >= 9) return 0.68F; if (i >= 8) return 0.71F; if (i >= 7) return 0.74F; if (i >= 6) return 0.77F; if (i >= 5) return 0.8F; if (i >= 4) return 0.83F; if (i >= 3) return 0.86F; if (i >= 2) return 0.9F; if (i >= 1) return 0.95F; } if (this.ScriptItem.Categories.contains("Axe")) { int i = paramIsoGameCharacter.getPerkLevel(PerkFactory.Perks.Axe); float f = 1.0F; if (paramIsoGameCharacter.Traits.Axeman.isSet()) f = 0.95F; if (i >= 10) return 0.65F * f; if (i >= 9) return 0.68F * f; if (i >= 8) return 0.71F * f; if (i >= 7) return 0.74F * f; if (i >= 6) return 0.77F * f; if (i >= 5) return 0.8F * f; if (i >= 4) return 0.83F * f; if (i >= 3) return 0.86F * f; if (i >= 2) return 0.9F * f; if (i >= 1) return 0.95F * f; return 1.0F * f; } if (this.ScriptItem.Categories.contains("Spear")) { int i = paramIsoGameCharacter.getPerkLevel(PerkFactory.Perks.Spear); if (i >= 10) return 0.65F; if (i >= 9) return 0.68F; if (i >= 8) return 0.71F; if (i >= 7) return 0.74F; if (i >= 6) return 0.77F; if (i >= 5) return 0.8F; if (i >= 4) return 0.83F; if (i >= 3) return 0.86F; if (i >= 2) return 0.9F; if (i >= 1) return 0.95F; } return 1.0F; } IsoTree public void WeaponHit(IsoGameCharacter paramIsoGameCharacter, HandWeapon paramHandWeapon) { int i = paramHandWeapon.getConditionLowerChance() * 2 + paramIsoGameCharacter.getMaintenanceMod(); if (!paramHandWeapon.getCategories().contains("Axe")) i = paramHandWeapon.getConditionLowerChance() / 2 + paramIsoGameCharacter.getMaintenanceMod(); if (Rand.NextBool(i)) paramHandWeapon.setCondition(paramHandWeapon.getCondition() - 1); paramIsoGameCharacter.getEmitter().playSound("ChopTree"); WorldSoundManager.instance.addSound(null, this.square.getX(), this.square.getY(), this.square.getZ(), 20, 20, true, 4.0F, 15.0F); setRenderEffect(RenderEffectType.Hit_Tree_Shudder, true); float f = paramHandWeapon.getTreeDamage(); if (paramIsoGameCharacter.Traits.Axeman.isSet() && paramHandWeapon.getCategories().contains("Axe")) f *= 1.5F; this.damage = (int)(this.damage - f); if (this.damage <= 0) { this.square.transmitRemoveItemFromSquare(this); paramIsoGameCharacter.getEmitter().playSound("FallingTree"); this.square.RecalcAllWithNeighbours(true); int j = this.LogYield; byte b; for (b = 0; b < j; b++) { this.square.AddWorldInventoryItem("Base.Log", 0.0F, 0.0F, 0.0F); if (Rand.Next(4) == 0) this.square.AddWorldInventoryItem("Base.TreeBranch", 0.0F, 0.0F, 0.0F); if (Rand.Next(4) == 0) this.square.AddWorldInventoryItem("Base.Twigs", 0.0F, 0.0F, 0.0F); } reset(); CellLoader.isoTreeCache.add(this); for (b = 0; b < IsoPlayer.numPlayers; ) { LosUtil.cachecleared[b] = true; b++; } IsoGridSquare.setRecalcLightTime(-1); GameTime.instance.lightSourceUpdate = 100.0F; LuaEventManager.triggerEvent("OnContainerUpdate"); } LuaEventManager.triggerEvent("OnWeaponHitTree", paramIsoGameCharacter, paramHandWeapon); } I guess those things you would have to mimic in Lua if a baseballbat is equipped and the character wielding it has your trait. leon2356 1 Quote Share this post Link to post Share on other sites
leon2356 70 Posted December 22, 2020 Posted December 22, 2020 @Dr_Cox1911 My hero! Quote Share this post Link to post Share on other sites