Jump to content

Tchernobill

Member
  • Posts

    166
  • Joined

  • Last visited

Everything posted by Tchernobill

  1. Tchernobill

    Lone Survivor

    Hi, It's been more than a year now. I'm still hyped with the NPC Narratives you described here and had planned for B43. I hope it is still part of your long term plans.
  2. Agreed ! After testing with that mod, I suggest to get access from 300% (very usefull with vehicles) to 12% or 15% (will be used a lot by fashion victims). Could go over 300%, maybe 400% or 500% once the performances are increased with B42. it is only one line change from MultiTextureFBO2.java B41.78.16 vanilla: private final float[] zoomLevelsDefault = new float[]{5.0F, 4.5F, 4.0F, 3.5F, 3.0F, 2.5F, 2.25F, 2.0F, 1.75F, 1.5F, 1.25F, 1.0F, 0.75F, 0.5F, 0.4F, 0.3F, 0.2F, 0.15F, 0.12F, 0.10F}; And then there are the tests.
  3. I've experienced the missing 3D character in character page too, 2 or 3 times with no mod early 2021 IWBUMS.
  4. Vanilla does not allow to use tooltips on items before a game is started. But vanilla does never asks for tooltips before a game is started. So you're correct the bug is caused by the mod (Autoloot). But vanilla could allow it.
  5. Mods: ModOptions + Autoloot + Isotermal Can of Coffee The error described below occurs when a tooltip of a range weapon or modded item is rendered while no game save is running. (the game is still in the main menu or a submenu) Range weapon Error Caused by: java.lang.NullPointerException: Cannot invoke "zombie.characters.IsoGameCharacter.getPerkLevel(zombie.characters.skills.PerkFactory$Perk)" because "<parameter1>" is null at zombie.inventory.types.HandWeapon.getMaxRange(HandWeapon.java:807) at zombie.inventory.types.HandWeapon.DoTooltip(HandWeapon.java:286) at zombie.inventory.InventoryItem.DoTooltip(InventoryItem.java:619) Modded item Error Caused by: java.lang.NullPointerException: Cannot invoke "zombie.world.DictionaryData.getItemInfoFromID(short)" because "zombie.world.WorldDictionary.data" is null at zombie.world.WorldDictionary.getItemInfoFromID(WorldDictionary.java:268) at zombie.inventory.InventoryItem.DoTooltip(InventoryItem.java:727) Notes: Autoloot mod is creating items from menu / options / mods Autoloot / Change Configuration context. when the cursor is on the isothermal can of coffee, error spawns when the cursor is on the D-E Pistol, error spawns I know this cannot be a priority
  6. You can get the Field instances and use their methods in debug mode. You can get the Field instances but not use their methods in non-debug mode. In order to make it work out of debug mode, you can use (at your own risks) the string casts of those Field instances. If you go this road, I strongly suggest to do this parsing only once per fieldName, on first request or during init. local Verbose = true function getField(class, fieldName) local i = 0 while true do --TODO for loop with getNumClassFields(Object var0) local field = getClassField(class,i) if not field then if Verbose then print ("param "..i.." "..tostring("no field")); end return nil end --private field is not accessible out of debug mod and any access to it (even modifiers reading wil crash) --that's why I use the dirty string analysis below. local stringField = tostring(field) local isPrivate = string.sub(stringField,1,string.len("private"))=="private" local isProtected = string.sub(stringField,1,string.len("protected"))=="protected" local isRightName = fieldName == "" or stringField:sub(-#fieldName) == fieldName if not isPrivate and not isProtected then if ShoesSpeed.Verbose then print ("param "..i.." is public."); end if isRightName then return field end --if we reach here, it was not the right field (but public) else --if we reach here, it was not the right field (and private or protected) if Verbose then print ("param "..i.." is private or protected."); end end i = i + 1 end return nil end
  7. I made a Stick mod that partially fills your request.
  8. I made a mod that implements the shoes RunSpeedModifier. (only the shoes, not other clothings) I made it because I really wanted to make a rollerblades mod.
  9. • 41.78.7 • SinglePlayer (solo). • No mod. • Still occurs on new save • Reproduction steps: 1. Start game in debug mode. 2. Add weapons and weapon parts from debug Item list. 3. right click on weapons and weapons part => there is no upgrade option There is no button to upgrade a M9 Pistol with Iron sight. See attached pictures. It occures with all range weapons and all weapon parts. Did I miss an update on this topic ?
  10. Using Tiled from Project Zomboid Modding Tool, I am not able to create a pack from pictures (not tiles) I choose a directory with my png's and untick as those are not tiles but it creates no pack. Using, Project Zomboid Pack Manager, I do not know how to edit the pictures in a pack (I only changed the picture names with an hexa editor, but I want to change sizes and picture numbers) using Soulficher Farming Time pack as an exemple. So how should I edit the meta data ? Regards,
  11. It works better with isoToScreenX and y functions function MyLuaUIElementClass:renderIsoCircle(playerNum, posX, posY, posZ, ray, r, g, b, a) local angularStep = 0.3490658503988659D; for var11 = 0, 6.283185307179586D, angularStep do--from 0 to 2 PI local xStart = posX + ray * Math.cos(var11); local yStart = posY + ray * Math.sin(var11); local xEnd = posX + ray * Math.cos(var11 + angularStep); local yEnd = posY + ray * Math.sin(var11 + angularStep); local xScreen1 = isoToScreenX(playerNum, xStart, yStart, posZ); local yScreen1 = isoToScreenY(playerNum, xStart, yStart, posZ); local xScreen2 = isoToScreenX(playerNum, xEnd , yEnd , posZ); local yScreen2 = isoToScreenY(playerNum, xEnd , yEnd , posZ); --LineDrawer.drawLine(xScreen1, yScreen1, xScreen2, yScreen2, r, g, b, a, var8); self:drawLine2( xScreen1, yScreen1, xScreen2, yScreen2, a, r, g, b) end end
  12. use renderIsoCircle. (constant parameters) change zoom level. Current the circle changes its position relative to the terrain database. the circle changes its position relative to the screen. Expected the circle does not change its position relative to the terrain database.
  13. Multiplayer dedicated server. A mod writes a new table and inner values to the moddata of the BaseVehicle (client side). Then it calls transmitModData() on that same BaseVehicle. The ModData values set remain on the client side. The client disconnect then join again. Current: The ModData values set previously are not available on the client side of the BaseVehicle. Expected: The ModData values set previously remain available on the client side of the BaseVehicle. Notes: The equivalent code is working as expected for the furniture objets. (*) I expect transmitModData() to send a non-destructive update of the vehicle moddata tables.
  14. There is no problem without mod as all vanilla moodles descriptions have one line of title and one of description. (yet, as far as I know). The problem occures with the Clear description for Moodles mod. The fact the shape always takes only one line of title and one line of description is done by vanilla MoodlesUI.java in render() method if (this.MouseOver && var2 == this.MouseOverSlot) { String var15 = this.UseCharacter.getMoodles().getMoodleDisplayString(var3); String var16 = this.UseCharacter.getMoodles().getMoodleDescriptionString(var3); var9 = TextManager.instance.font.getWidth(var15); var10 = TextManager.instance.font.getWidth(var16); int var11 = Math.max(var9, var10); int var12 = TextManager.instance.font.getLineHeight(); int var13 = (int)this.MoodleSlotsPos[var3] + 1; int var14 = (2 + var12) * 2; this.DrawTextureScaledColor((Texture)null, -10.0D - (double)var11 - 6.0D, (double)var13 - 2.0D, (double)var11 + 12.0D, (double)var14, 0.0D, 0.0D, 0.0D, 0.6D); this.DrawTextRight(var15, -10.0D, (double)var13, 1.0D, 1.0D, 1.0D, 1.0D); this.DrawTextRight(var16, -10.0D, (double)(var13 + var12), 0.800000011920929D, 0.800000011920929D, 0.800000011920929D, 1.0D); } Modders could compensate by adding the missing part from lua code but I prefer to ask TIS to make it more generic. instead of int var12 = TextManager.instance.font.getLineHeight(); it could use something like int var12 = TextManager.instance.font.getHeight(var15); instead of int var14 = (2 + var12) * 2; it could use something like int var14 = var12+TextManager.instance.font.getHeight(var16)+4;
  15. You probably already can do that: hook ISReadABook:perform() use self.character:getAlreadyReadBook() array and self.item:getFullType() At worse, make a static table of all Maps item to link maps items and the fact a zone is known. But we can probably identify them from category / display category or some Java types or whatever.
  16. --xpUpdate.everyTenMinutes = function() extract from XpUpdate.lua B41.73 modData.strengthUpTimer = modData.strengthUpTimer + 10; -- if we've been lazy for too long, we start losing xp, every 1200 tick we lose 1 xp if modData.strengthUpTimer > 20000 and modData.strengthMod ~= math.floor(modData.strengthUpTimer / 1200) then --[..] decrease strength xp end if modData.strengthUpTimer > 31000 then -- it's caped to a 30000 timer, so if you've been lazy for a lot of days, it's not so long to get in shape again modData.strengthUpTimer = 0; end The comment does not match the code. Current: xp decays after ~14 days without xp earned until ~22 days then it will not decrease for ~14 days. I guess the code is incorrect and it should be a timer saturation instead of a timer reset. Proposed modification: --xpUpdate.everyTenMinutes = function() proposed modification in XpUpdate.lua modData.strengthUpTimer = modData.strengthUpTimer + 10; -- if we've been lazy for too long, we start losing xp, every 1200 tick we lose 1 xp if modData.strengthUpTimer > 20000 and modData.strengthMod ~= math.floor(modData.strengthUpTimer / 1200) then --[..] decrease strength xp end if modData.strengthUpTimer > 31000 then -- it's caped to a 31000 timer, so if you've been lazy for a lot of days, it's not so long to get in shape again modData.strengthUpTimer = 31000; end Proposition: xp decays after ~14 days without xp earned. Notes: I set aside the fact that with every xp earned the timer increases by 2 days as it seems not relevant to the reset / saturation choice. I set aside the strengthMod escape every 20 hours as it seems not relevant to the reset / saturation choice.
  17. On Dr Client side: (lua/client) sendClientCommand("DrHide", "vaccinePlayer", _data); -- _data should include the onlineID of the target player. This allows you to identify him on server side On Server side: (lua/server) DrHideServer = {} DrHideServer.OnClientCommand = function(_module, _command, _player, _packet)--not that _player is the source player. i.e. the Dr. if _module ~= "DrHide" then return; end;--the message is not for you. it's ok if (_command ~= "vaccinePlayer") or (not _packet) then return end; --bug maybe log this too --TODO interpret _packet -- it should include the onlineID of the target player. This allows you to identify him on server side --in your case there are two possibilities: -- 1/ modify the target player mod data (getModData().DrHideMD) and update them (with ModData.transmit("DrHideMD")) -- 2/ sendServerCommand to the target player end Events.OnClientCommand.Add(DrHideServer.OnClientCommand); On Vaccine target Client side: (lua/client) --if you used moddata update from server: local function OnReceiveGlobalModData(_module, _packet) if _module ~= "DrHideMD" then return; end; ModData.add(_module, _packet); --now you can use the updated moddata end; end Events.OnReceiveGlobalModData.Add(OnReceiveGlobalModData) This is how Donkaike made it in Prisonner mod. I guess you could use OnServerCommand in case 2 (using sendServerCommand on server side).
  18. this mod modifies the item definition that is used at item spawn time. It will never modify an already spawned item. You need something else to modify the item already spawned.
  19. I see how the java code is computing the player CombatSpeed variable. I see that this variable is an input of animations as described in some xml files (e.g. 1HDefault.xml) Can someone (TIS?) explain me how to predict the resulting time between the start of the animation and the next moment the player can attack again (supposedly the time of the animation) ? Can I use blindly the hit animation time as displayed in the ingame debug / dev / animation viewer ? Should I use those times and add some transition delays ? Please, help.
  20. I wish I knew ! IbrRus did it for their dance animation mods. Authentic Peach has some knowledge and is sometimes streaming it on twitch. Maybe sometime TIS or one of those geniuses will guide us to the light .
  21. Sorry for putting this in the bug reports section. I have no bug to report about this. I just suppose IsoGameCharacter:CanAttack() should return false while the player is shoving or stomping. Currently it returns true but the player cannot attack.
×
×
  • Create New...