Jump to content

XLib and XSkills


Xandu

Recommended Posts

3 hours ago, EiraValkyrie said:

So, I changed the Well Rested effect in config to be 1800 seconds for Tier 2 (so it will last on long treks to mining shafts and such). Despite the tooltip saying it will last 1800 seconds, I only get the effect for 8.6 minutes. ...how. Did I change it wrong? Is there a hidden multiplier?

It scales with the time you have slept. It seems like something went wrong at this point and it limits the duration of the effect to the time you slept. I have to take a look at it.

Link to comment
Share on other sites

when xSkills is loaded, trying to craft any lamellae with a chisel to break it down only produces 10 bits instead of the vanilla 20. it will flash 20, then show 10 and only craft 10.

 

a player on my server gets this crash anytime they disconnect. i havent myself and no one else has reported.

Spoiler

Running on 64 bit Windows with 16 GB RAM 
Game Version: v1.17.9 (Stable)
2022/10/29 11:44:07: Critical error occurred
Loaded Mods: 
Involved Harmony IDs: XEffectsPatch, XSkillsPatch
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'The ThreadLocal object has been disposed.'.
   at System.Threading.ThreadLocal`1.GetValueSlow()
   at Vintagestory.API.Common.CollectibleObject.UpdateAndGetTransitionStatesNative(IWorldAccessor world, ItemSlot inslot) in VintagestoryApi\Common\Collectible\Collectible.cs:line 2213
   at Vintagestory.API.Common.CollectibleObject.AppendPerishableInfoText(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world) in VintagestoryApi\Common\Collectible\Collectible.cs:line 1579
   at Vintagestory.API.Common.CollectibleObject.GetHeldItemInfo_Patch2(CollectibleObject this, ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo)
   at Vintagestory.API.Common.Block.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 2238
   at Vintagestory.API.Common.ItemStack.GetDescription(IWorldAccessor world, ItemSlot inSlot, Boolean debug) in VintagestoryApi\Common\Collectible\ItemStack.cs:line 372
   at Vintagestory.GameContent.GuiHandbookItemStackPage..ctor(ICoreClientAPI capi, ItemStack stack) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 42
   at Vintagestory.GameContent.GuiDialogHandbook.BuildPages_Async(List`1 allstacks) in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 516
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

 

Link to comment
Share on other sites

on my server, if someone has gears in their Strongback slots and tries to buy something at a trader, they will disconnect from the server throwing an exception and the gears will be deleted
 

The server console error:

Spoiler

10:44:54 [Server Warning] Exception at client 14. Disconnecting client.
10:44:54 [Server Event] Player CreamedPie got removed. Reason: Threw an exception at the server
10:44:54 [Server Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.GameContent.InventoryTrader.DeductFromEntity (Vintagestory.API.Common.ICoreAPI api, Vintagestory.API.Common.EntityAgent eagent, System.Int32 totalUnitsToDeduct) [0x00081] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.GameContent.ModSystemAuction.PurchaseAuction (System.Int64 auctionId, Vintagestory.API.Common.EntityAgent buyerEntity, Vintagestory.API.Common.Entities.Entity auctioneerEntity, System.Boolean withDelivery, System.String& failureCode) [0x00086] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.GameContent.ModSystemAuction.onAuctionAction (Vintagestory.API.Server.IServerPlayer fromPlayer, Vintagestory.GameContent.AuctionActionPacket pkt) [0x00109] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.Server.NetworkChannel+<>c__DisplayClass6_0`1[T].<SetMessageHandler>b__0 (Packet_CustomPacket p, Vintagestory.API.Server.IServerPlayer player) [0x0001f] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.NetworkChannel.OnPacket (Packet_CustomPacket p, Vintagestory.API.Server.IServerPlayer player) [0x00022] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.NetworkAPI.HandleCustomPacket (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x0001c] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0

 

Link to comment
Share on other sites

Hey, I hope it's not too bothersome, but is there any chance the rolling pins from A Culinary Artillery could be a part of the Tool Mastery skill? 😅 You have boosts for the forestry, mining, metalworking, farming, and digging skills, but not cooking. While we're at it, maybe cleavers could scale with animal husbandry? That would give Tool Mastery use for every skill but Pottery.

  • Haha 1
Link to comment
Share on other sites

Hi, recently i had a problem with my world related to the xskill mod. Put in less words, my problem was that any item enters in the crafting grid, once dropped, disappears or generally disappears in the inventory or goes back to before I interacted with it. Trying not to lose a 70 hours world, I tried to re-download the mod, use an old version, trying to find conflicts with other mods but it turned out to be useless, even the backups of this world was crashed.

  • Confused 1
Link to comment
Share on other sites

For the quality stuff you gain with certain perks, could we have a config on how often we get certain levels of quality depending on level of the corresponding skill? I'd want to make it so at max level it heavily favours the highest quality. (keeping in mind I've increased max level of skills for my solo play, so maybe make it a curve).

Edit: I'm an idiot. I can just manually add another tier that forces higher quality. Ignore me.

Edited by EiraValkyrie
Link to comment
Share on other sites

For two players on my server, whenever they login, the server log is full of error messages like this:

14.11.2022 05:43:49 [Fatal] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.GameContent.BlockContainer.SetContents (Vintagestory.API.Common.ItemStack containerStack, Vintagestory.API.Common.ItemStack[] stacks) [0x00007] in <b64b70fbdbd94ce2a8289
199cd50dea9>:0
  at Vintagestory.GameContent.BlockPie.UpdateAndGetTransitionState (Vintagestory.API.Common.IWorldAccessor world, Vintagestory.API.Common.ItemSlot inslot, Vintagestory.API.Common.EnumTran
sitionType type) [0x0001d] in <b64b70fbdbd94ce2a8289199cd50dea9>:0
  at Vintagestory.GameContent.BlockPie.OnBaked (Vintagestory.API.Common.ItemStack oldStack, Vintagestory.API.Common.ItemStack newStack) [0x000f0] in <b64b70fbdbd94ce2a8289199cd50dea9>:0
  at (wrapper dynamic-method) Vintagestory.GameContent.BlockEntityOven.Vintagestory.GameContent.BlockEntityOven.IncrementallyBake_Patch2(Vintagestory.GameContent.BlockEntityOven,single,in
t)
  at Vintagestory.GameContent.BlockEntityOven.HeatInput (System.Single dt) [0x00029] in <b64b70fbdbd94ce2a8289199cd50dea9>:0
  at Vintagestory.GameContent.BlockEntityOven.OnBurnTick (System.Single dt) [0x0013c] in <b64b70fbdbd94ce2a8289199cd50dea9>:0
  at Vintagestory.Common.EventManager.TriggerGameTick (System.Int64 ellapsedMilliseconds, Vintagestory.API.Common.IWorldAccessor world) [0x000d3] in <f8e7e0ea709348ba8693d95fd255ff41>:0
  at Vintagestory.Server.CoreServerEventManager.TriggerGameTick (System.Int64 ellapsedMilliseconds, Vintagestory.API.Common.IWorldAccessor world) [0x00000] in <f8e7e0ea709348ba8693d95fd25
5ff41>:0
  at Vintagestory.Server.ServerMain.Process () [0x0020d] in <f8e7e0ea709348ba8693d95fd255ff41>:0

 

Eventually the player's client times out.

The IncrementallyBake_Patch2 part seems to be coming from xskills. Can you maybe catch the exception and delete the pie?

I'm using xskills_v0.6.13.zip and xlib_v0.6.10.zip along with a lot of other mods.

Link to comment
Share on other sites

not exactly sure what caused it, but something happened when the world was trying to save (the first error), clients crashed out (i think the next couple errors) then after no other clients could connect for a little while (the rest of the errors). Server did recover after a bit and seems to be going again without restarting.
 

Spoiler

19.11.2022 14:51:16 [Error] Exception thrown during handling event OnGameWorldBeingSaved: System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at XLib.XEffects.XEffectsSystem.OnGameWorldSave () [0x00028] in <8eea8c7cc33d4d3989dfac7208c86c96>:0 
  at Vintagestory.Server.ServerEventManager.TriggerGameWorldBeingSaved () [0x00022] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:51:16 [Notification] Defragmented listener lists
19.11.2022 14:51:16 [Event] Mods and systems notified, now saving everything...
19.11.2022 14:51:16 [Event] Will do offthread savegamedata saving...
19.11.2022 14:51:17 [Event] Saved player world data...
19.11.2022 14:51:17 [Event] Saved map regions...
19.11.2022 14:51:17 [Event] Saved map chunks...
19.11.2022 14:51:17 [Event] World saved! Saved 0 chunks, 0 mapchunks, 78 mapregions.
19.11.2022 14:51:17 [Notification] A client reconnected, resuming game calendar.
19.11.2022 14:51:17 [Notification] Server ticking has been resumed
19.11.2022 14:51:17 [Event] Saved 300 chunks...
19.11.2022 14:51:17 [Event] Saved 600 chunks...
19.11.2022 14:51:18 [Event] Saved 900 chunks...
19.11.2022 14:51:18 [Warning] Server overloaded. A tick took 1544ms to complete.
19.11.2022 14:51:18 [Event] Saved 1200 chunks...
19.11.2022 14:51:18 [Event] Offthread save of 1404 chunks done.
19.11.2022 14:51:18 [Notification] Offthread save of 0 generating chunks done.
19.11.2022 14:51:19 [Warning] Server overloaded. A tick took 535ms to complete.
19.11.2022 14:51:21 [Event] Offthread save of 3069 map chunks done.
19.11.2022 14:51:21 [Event] Offthread save of savegame done.
19.11.2022 14:51:35 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:36 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:38 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:41 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:42 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:43 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:53 [Notification] A Client attempts connecting via TCP, assigning client id 46
19.11.2022 14:51:53 [Notification] Client uid nDVbCRQ5FIP/9UkQfa3zy+wC attempting identification. Name: Chucklenaut
19.11.2022 14:51:53 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:51:53 [Notification] Placing player at 511853.46875 186 512013.78125
19.11.2022 14:52:04 [Warning] Exception at client 46. Disconnecting client.
19.11.2022 14:52:04 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:52:40 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:40 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:41 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:42 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:43 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:43 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:45 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:45 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:58 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:53:00 [Event] Player Baka left.
19.11.2022 14:53:05 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:53:07 [Event] Player Glitcher left.
19.11.2022 14:53:13 [Notification] Handling Command /waypoint addati circle =511891.021702416 =166 =529519.534634006 True #080504 черноз'м
19.11.2022 14:53:25 [Notification] A Client attempts connecting via TCP, assigning client id 47
19.11.2022 14:53:25 [Notification] Client uid 44fEeWb/AaKFMI/4O3LyAgzy attempting identification. Name: Baka
19.11.2022 14:53:26 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:26 [Notification] Placing player at 510457.53125 180 513498.71875
19.11.2022 14:53:30 [Warning] Exception at client 47. Disconnecting client.
19.11.2022 14:53:30 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:30 [Event] Player Quacksol got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Fliegen got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player unjoyer got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Client disconnected.
19.11.2022 14:53:30 [Event] Player Romec left.
19.11.2022 14:53:30 [Event] Player KraftLawrence got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Terro got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player XAXOL got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Pori got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Celinor got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Kidokit got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player DonGak got removed. Reason: The Players client crashed
19.11.2022 14:53:31 [Notification] All clients disconnected, pausing game calendar.
19.11.2022 14:53:41 [Notification] A Client attempts connecting via TCP, assigning client id 48
19.11.2022 14:53:41 [Notification] Client uid ACIW+lx/CPQPFuNRnyqjFcwj attempting identification. Name: Fliegen
19.11.2022 14:53:42 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:42 [Notification] Placing player at 506727.4375 172 521547.375
19.11.2022 14:53:43 [Notification] A Client attempts connecting via TCP, assigning client id 49
19.11.2022 14:53:43 [Notification] Client uid 8iwS5OkNjgOVDCocnaXXp0eI attempting identification. Name: Celinor
19.11.2022 14:53:43 [Notification] A Client attempts connecting via TCP, assigning client id 50
19.11.2022 14:53:43 [Notification] Client uid lpHPZg19TPPUelV8Rc0L/qeB attempting identification. Name: Kidokit
19.11.2022 14:53:43 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:43 [Notification] Placing player at 511432.815568243 167 512324.763311028
19.11.2022 14:53:44 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:44 [Notification] Placing player at 509813.28125 171 526019.875
19.11.2022 14:53:47 [Warning] Exception at client 48. Disconnecting client.
19.11.2022 14:53:47 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:48 [Warning] Exception at client 49. Disconnecting client.
19.11.2022 14:53:48 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:51 [Notification] A Client attempts connecting via TCP, assigning client id 51
19.11.2022 14:53:51 [Notification] Client uid ARH8qO869PZ1Puck9qkLau+z attempting identification. Name: Romec
19.11.2022 14:53:51 [Notification] Delayed join, need to load one spawn chunk first.
19.11.2022 14:53:51 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:52 [Notification] Placing player at 511941.531253444 173 512628.78125
19.11.2022 14:53:53 [Warning] Exception at client 50. Disconnecting client.
19.11.2022 14:53:53 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:54 [Warning] Exception at client 51. Disconnecting client.
19.11.2022 14:53:54 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0

 

Link to comment
Share on other sites

Hi guys, I finally "finished" the next patch. I had to do some private stuff and it is quite a large patch because it reworks some of the cooking stuff. So it tok a while. But first I want to answer to some posts even when there are already a little bit older.

 

On 11/3/2022 at 3:45 PM, RogueRaiden said:

when xSkills is loaded, trying to craft any lamellae with a chisel to break it down only produces 10 bits instead of the vanilla 20. it will flash 20, then show 10 and only craft 10.

 

a player on my server gets this crash anytime they disconnect. i havent myself and no one else has reported.

  Reveal hidden contents

Running on 64 bit Windows with 16 GB RAM 
Game Version: v1.17.9 (Stable)
2022/10/29 11:44:07: Critical error occurred
Loaded Mods: 
Involved Harmony IDs: XEffectsPatch, XSkillsPatch
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'The ThreadLocal object has been disposed.'.
   at System.Threading.ThreadLocal`1.GetValueSlow()
   at Vintagestory.API.Common.CollectibleObject.UpdateAndGetTransitionStatesNative(IWorldAccessor world, ItemSlot inslot) in VintagestoryApi\Common\Collectible\Collectible.cs:line 2213
   at Vintagestory.API.Common.CollectibleObject.AppendPerishableInfoText(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world) in VintagestoryApi\Common\Collectible\Collectible.cs:line 1579
   at Vintagestory.API.Common.CollectibleObject.GetHeldItemInfo_Patch2(CollectibleObject this, ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo)
   at Vintagestory.API.Common.Block.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 2238
   at Vintagestory.API.Common.ItemStack.GetDescription(IWorldAccessor world, ItemSlot inSlot, Boolean debug) in VintagestoryApi\Common\Collectible\ItemStack.cs:line 372
   at Vintagestory.GameContent.GuiHandbookItemStackPage..ctor(ICoreClientAPI capi, ItemStack stack) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 42
   at Vintagestory.GameContent.GuiDialogHandbook.BuildPages_Async(List`1 allstacks) in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 516
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

 

The flashing should be fixed with the new update. The Reduction is on purpose: The metalworking skill allows you to get more items with fewer costs. The mod reduces the amount of bits you receive for recycling these items to prevent infinity metal loops. You can configure this feature by setting the "chiselRecipesRatio" value in the metalworking config file. Set it to "1.0" to disable this feature.
 

The crash could be related to an old xlib version. Make sure it is up to date and write me if this issue still exists.

 

On 11/4/2022 at 3:53 PM, RogueRaiden said:

on my server, if someone has gears in their Strongback slots and tries to buy something at a trader, they will disconnect from the server throwing an exception and the gears will be deleted
 

The server console error:

  Reveal hidden contents

10:44:54 [Server Warning] Exception at client 14. Disconnecting client.
10:44:54 [Server Event] Player CreamedPie got removed. Reason: Threw an exception at the server
10:44:54 [Server Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.GameContent.InventoryTrader.DeductFromEntity (Vintagestory.API.Common.ICoreAPI api, Vintagestory.API.Common.EntityAgent eagent, System.Int32 totalUnitsToDeduct) [0x00081] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.GameContent.ModSystemAuction.PurchaseAuction (System.Int64 auctionId, Vintagestory.API.Common.EntityAgent buyerEntity, Vintagestory.API.Common.Entities.Entity auctioneerEntity, System.Boolean withDelivery, System.String& failureCode) [0x00086] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.GameContent.ModSystemAuction.onAuctionAction (Vintagestory.API.Server.IServerPlayer fromPlayer, Vintagestory.GameContent.AuctionActionPacket pkt) [0x00109] in <b64b70fbdbd94ce2a8289199cd50dea9>:0 
  at Vintagestory.Server.NetworkChannel+<>c__DisplayClass6_0`1[T].<SetMessageHandler>b__0 (Packet_CustomPacket p, Vintagestory.API.Server.IServerPlayer player) [0x0001f] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.NetworkChannel.OnPacket (Packet_CustomPacket p, Vintagestory.API.Server.IServerPlayer player) [0x00022] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.NetworkAPI.HandleCustomPacket (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x0001c] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0

 

This seems to be related to the auction house. Does this also occur when you just buy things from the trader? I wasn't able to reproduce this when i just buy things and I cannot reproduce auction house stuff at all. So it is really hard for me to find the issue. 

 

On 11/6/2022 at 8:04 PM, l33tmaan said:

Hey, I hope it's not too bothersome, but is there any chance the rolling pins from A Culinary Artillery could be a part of the Tool Mastery skill? 😅 You have boosts for the forestry, mining, metalworking, farming, and digging skills, but not cooking. While we're at it, maybe cleavers could scale with animal husbandry? That would give Tool Mastery use for every skill but Pottery.

The Tool Mastery skill and other combat abilities usually use the EnumTool to determine which abilities should be applied. This is easy and fast to do and when mods add new weapons to these categories there are already included but it makes it difficult or laborious to add stuff that isn't in one of the predefinded categories. I think somebody already suggested this one's so the rolling pins already are an exception to this rule. But I don't want to add many more at the moment because it makes the code just more clunky. But i added some tools that were easy to add to the ability. But cleavers don't seem to have any tool category.

 

On 11/10/2022 at 12:37 PM, Cricus said:

Hi, recently i had a problem with my world related to the xskill mod. Put in less words, my problem was that any item enters in the crafting grid, once dropped, disappears or generally disappears in the inventory or goes back to before I interacted with it. Trying not to lose a 70 hours world, I tried to re-download the mod, use an old version, trying to find conflicts with other mods but it turned out to be useless, even the backups of this world was crashed.

Why do you think this is related to the xskill? Have you tried it without any mods? You can usually just disable and enable xskills. The only issue could be caused by old cooking pots/meals/crooks that i think don't even exist anymore.

 

On 11/18/2022 at 3:28 PM, Jefferzoonn said:

Hello, I have seen that there are different translations for the mod, and I would like to collaborate by translating it into Spanish

There are some localisation files in the mods folder: "xskills/assets/xskills/lang". You can translate the "es.json" file and just add the file here in the forum. I will then add the file to the mod. If you want to know how a translated file should look like you can look at the other already translated files.
 

On 11/19/2022 at 9:31 PM, RogueRaiden said:

not exactly sure what caused it, but something happened when the world was trying to save (the first error), clients crashed out (i think the next couple errors) then after no other clients could connect for a little while (the rest of the errors). Server did recover after a bit and seems to be going again without restarting.
 

  Reveal hidden contents

19.11.2022 14:51:16 [Error] Exception thrown during handling event OnGameWorldBeingSaved: System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at XLib.XEffects.XEffectsSystem.OnGameWorldSave () [0x00028] in <8eea8c7cc33d4d3989dfac7208c86c96>:0 
  at Vintagestory.Server.ServerEventManager.TriggerGameWorldBeingSaved () [0x00022] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:51:16 [Notification] Defragmented listener lists
19.11.2022 14:51:16 [Event] Mods and systems notified, now saving everything...
19.11.2022 14:51:16 [Event] Will do offthread savegamedata saving...
19.11.2022 14:51:17 [Event] Saved player world data...
19.11.2022 14:51:17 [Event] Saved map regions...
19.11.2022 14:51:17 [Event] Saved map chunks...
19.11.2022 14:51:17 [Event] World saved! Saved 0 chunks, 0 mapchunks, 78 mapregions.
19.11.2022 14:51:17 [Notification] A client reconnected, resuming game calendar.
19.11.2022 14:51:17 [Notification] Server ticking has been resumed
19.11.2022 14:51:17 [Event] Saved 300 chunks...
19.11.2022 14:51:17 [Event] Saved 600 chunks...
19.11.2022 14:51:18 [Event] Saved 900 chunks...
19.11.2022 14:51:18 [Warning] Server overloaded. A tick took 1544ms to complete.
19.11.2022 14:51:18 [Event] Saved 1200 chunks...
19.11.2022 14:51:18 [Event] Offthread save of 1404 chunks done.
19.11.2022 14:51:18 [Notification] Offthread save of 0 generating chunks done.
19.11.2022 14:51:19 [Warning] Server overloaded. A tick took 535ms to complete.
19.11.2022 14:51:21 [Event] Offthread save of 3069 map chunks done.
19.11.2022 14:51:21 [Event] Offthread save of savegame done.
19.11.2022 14:51:35 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:36 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:38 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:41 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:42 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:43 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:51:53 [Notification] A Client attempts connecting via TCP, assigning client id 46
19.11.2022 14:51:53 [Notification] Client uid nDVbCRQ5FIP/9UkQfa3zy+wC attempting identification. Name: Chucklenaut
19.11.2022 14:51:53 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:51:53 [Notification] Placing player at 511853.46875 186 512013.78125
19.11.2022 14:52:04 [Warning] Exception at client 46. Disconnecting client.
19.11.2022 14:52:04 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:52:40 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:40 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:41 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:42 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:43 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:43 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:45 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:45 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:52:58 [Notification] Client Baka tried to place a block but rejected because it would intersect with another player
19.11.2022 14:53:00 [Event] Player Baka left.
19.11.2022 14:53:05 [Notification] Client Glitcher tried to place a block but rejected because it would intersect with another player
19.11.2022 14:53:07 [Event] Player Glitcher left.
19.11.2022 14:53:13 [Notification] Handling Command /waypoint addati circle =511891.021702416 =166 =529519.534634006 True #080504 черноз'м
19.11.2022 14:53:25 [Notification] A Client attempts connecting via TCP, assigning client id 47
19.11.2022 14:53:25 [Notification] Client uid 44fEeWb/AaKFMI/4O3LyAgzy attempting identification. Name: Baka
19.11.2022 14:53:26 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:26 [Notification] Placing player at 510457.53125 180 513498.71875
19.11.2022 14:53:30 [Warning] Exception at client 47. Disconnecting client.
19.11.2022 14:53:30 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:30 [Event] Player Quacksol got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Fliegen got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player unjoyer got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Client disconnected.
19.11.2022 14:53:30 [Event] Player Romec left.
19.11.2022 14:53:30 [Event] Player KraftLawrence got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Terro got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player XAXOL got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Pori got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Celinor got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player Kidokit got removed. Reason: The Players client crashed
19.11.2022 14:53:30 [Event] Player DonGak got removed. Reason: The Players client crashed
19.11.2022 14:53:31 [Notification] All clients disconnected, pausing game calendar.
19.11.2022 14:53:41 [Notification] A Client attempts connecting via TCP, assigning client id 48
19.11.2022 14:53:41 [Notification] Client uid ACIW+lx/CPQPFuNRnyqjFcwj attempting identification. Name: Fliegen
19.11.2022 14:53:42 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:42 [Notification] Placing player at 506727.4375 172 521547.375
19.11.2022 14:53:43 [Notification] A Client attempts connecting via TCP, assigning client id 49
19.11.2022 14:53:43 [Notification] Client uid 8iwS5OkNjgOVDCocnaXXp0eI attempting identification. Name: Celinor
19.11.2022 14:53:43 [Notification] A Client attempts connecting via TCP, assigning client id 50
19.11.2022 14:53:43 [Notification] Client uid lpHPZg19TPPUelV8Rc0L/qeB attempting identification. Name: Kidokit
19.11.2022 14:53:43 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:43 [Notification] Placing player at 511432.815568243 167 512324.763311028
19.11.2022 14:53:44 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:44 [Notification] Placing player at 509813.28125 171 526019.875
19.11.2022 14:53:47 [Warning] Exception at client 48. Disconnecting client.
19.11.2022 14:53:47 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:48 [Warning] Exception at client 49. Disconnecting client.
19.11.2022 14:53:48 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:51 [Notification] A Client attempts connecting via TCP, assigning client id 51
19.11.2022 14:53:51 [Notification] Client uid ARH8qO869PZ1Puck9qkLau+z attempting identification. Name: Romec
19.11.2022 14:53:51 [Notification] Delayed join, need to load one spawn chunk first.
19.11.2022 14:53:51 [Notification] Sending server identification with remap False.  Server control privilege is False
19.11.2022 14:53:52 [Notification] Placing player at 511941.531253444 173 512628.78125
19.11.2022 14:53:53 [Warning] Exception at client 50. Disconnecting client.
19.11.2022 14:53:53 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
19.11.2022 14:53:54 [Warning] Exception at client 51. Disconnecting client.
19.11.2022 14:53:54 [Error] System.NullReferenceException: Object reference not set to an instance of an object
  at Vintagestory.API.Common.Entities.Entity.GetBehavior[T] () [0x00006] in <c45f8f9ae2e44e27810185f8d4839e5f>:0 
  at Vintagestory.Server.ServerWorldPlayerData.ToPacketForOtherPlayers (Vintagestory.API.Server.IServerPlayer owningPlayer) [0x0011a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.SendInitialPlayerDataForOthers (Vintagestory.API.Server.IServerPlayer owningPlayer, Vintagestory.API.Server.IServerPlayer toPlayer) [0x0009d] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleRequestJoin (Packet_Client packet, Vintagestory.Server.ConnectedClient client) [0x001e1] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.HandleClientPacket (Vintagestory.Server.ConnectedClient client, System.Byte[] data) [0x0005a] in <f8e7e0ea709348ba8693d95fd255ff41>:0 
  at Vintagestory.Server.ServerMain.ProcessNetMessage (Vintagestory.Common.NetIncomingMessage msg, Vintagestory.Common.NetServer mainSocket) [0x00151] in <f8e7e0ea709348ba8693d95fd255ff41>:0

 

This looks like a general issue with behaviors. I am not sure if this is related to xskills. I think this must be observed whether this kind of stuff happens more often.

 

On 11/24/2022 at 6:17 AM, l33tmaan said:

Hey Xandu, what do you think of adding a second rank to All-Rounder that's only available to the Commoner class, so they can pick 2 specializations? 🤔

The commoner class already gets more exp than everyone else. So i think it would make the class to strong. I will not add this to the default version. But it should be possible to this with a small json file and a small configuration change.


Back to the current patch. As mentioned above it reworks some of the cooking stuff. I hope I havn't add new bugs there. Especially this nasty bug that made cooking pots unusable after some time should be fixed now. I've also included other feedback and bug fixes.
 

-digging up forest floor and muddy gravel will now give digging experience
-the metal recovery ability should now give you blister steel bits when smithing steel items
-reworked cooking related stuff
    -reworked how the mod handles the cooking pot/oven/mixing bowl owner and no longer needs to replace the inventory classes
    -removed some old salt related code (you can no longer take salt out of cooking pots)
    -finally found and hopefully fixed a bug causing the cooking system to break after some time (was especially noticeable on servers)
    -firepit gui should now work correct with modified cooking times
-the duration of the well rested ability now scales slightly different, it now reaches its maximum duration if you slept for 8 hours

-Sickles and Scythes can now profit from the tool mastery ability and your farming skill
-Saws can now profit from the tool mastery ability and your forestry skill
-Knives can now profit from the tool mastery ability and your husbandry skill

-fixed broken cage recipe
-fixed metalbit recipes not being modified properly on the client side

  • Like 1
  • Cookie time 2
  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...
On 3/14/2020 at 9:46 PM, Xandu said:

Hello and welcome to the Xlib and XSkills mod. These are technically two mods with the aim to add a character progression system to the game. I split this in two mods to seperate the systems behind the mods from the actual skills.


Xlib is an interface that does nothing noticeable at its own. It consists of two parts XLeveling and XEffects. XLeveling provides an interface to add skills and abilities to the game, does synchronisation between server and client and saves and loads data. And it provides a dialog that can be opend by pressing the 'O' key by default. I made it so that you can use this to implement your own skills to the game if you want and you don't have to rely on the ones i created. The mod also adds some general information for skills and abilities to the ingame handbook. XEffects provides an interface to add temporary or permanent effects to the game that can influence a player.


XSkills is an implementation for skills and abilities that uses XLeveling . You gather experience for different skills by doing certain actions. And if you have collected enough experience  you will get an additional ability point that you can use to increase the tier of an ability. 

2021-03-25_13-38-09.thumb.png.41866c3d64c05aa9af4f67383985a129.png

This mod is still under development and some things will probably change. Never the less save games should always be compatible. If you have ideas for new abilities or skills i would like to hear them. If you find any bugs please report them to me so that i can fix them.

Skills

Following skills and abilities are currently implemented. Only the first tier of every ability is represented here:

  Reveal hidden contents

Skill: Survival

  Reveal hidden contents

Ability: Long Life
Increases your health by 5% and additional 1% for each level at the survival skill. Maxed out at 15%.

Ability: Huge Stomach
Increases your maximum saturation by 500.

Ability: All-rounder
You can learn 1 additional professions.

Ability: Photosynthesis
Increases your health generation in the sunlight up to 15% but reduces the health generation in the dark up to 25%.

Ability: Strong Back
Adds an additional inventory with 3 slots to your character. You can switch the items between this inventory and your hotbar. [default: R]

Ability: On the road
Increases your movement speed on paths by 10%.

Ability: Scout
Increases your movement speed by 5%.

Ability: Soulbound Bag
If you die you do not lose the items in your inventory of the Strong Back ability.

Ability: Luminiferous
You begin to glow in dark areas, creating a bright area around you with a light level of 10.

Ability: Cateyes
Your eyes can adjust to dark areas increasing the brightness up to 6 times, but you may lose some colors. Be careful with bright light sources while your eyes are adapted. 

Skill: Farming

  Reveal hidden contents

Ability: Green Thumb
Increases the yield of harvested crops by 10% and additional 2% for each level at the farming skill. Maxed out at 30%.

Ability: Demeter's Bless
Increases the yield of gathered seeds by 5% and additional 1% for every level at the farming skill. Maxed out at 15%.

Ability: Gatherer
Increases the yield from harvesting grass, berry bushes, reeds and mushrooms by 10% and additional 2% for every level at the farming skill. Maxed out at 30%.

Ability: Repotting
Harvesting non-matured crops drops always the seeds.

Ability: Careful Hands
Allows you to harvest mushrooms and reeds with your bare hands without breaking the roots.

Ability: Farmer
You will receive 40% more experience for all farming activities. The amount of professions you can learn is limited.

Ability: Cultivated Seeds
If you plant seeds the planted plant has a chance of 10% and additional 1% for each level at your farming skill to skip a growth stage. If the crop was planted in a greenhouse this ability will always trigger and has a chance to trigger again. The chance is capped at 30%.

Ability: Beekeeper
Breaking harvestable skeps will give you 1 more Honeycombs.

Ability: Composting
Every time you harvest a full grown crop the farmland will receive some nutrients back.

Ability: Beemaster
You can harvest skeps with right click without breaking them.

Skill: Digging

  Reveal hidden contents

Ability: Clay Digger
Increases clay harvesting yield by 10% and additional 2% for each level at the digging skill. Maxed out at 30%.

Ability: Peat Cutter
Increases peat harvesting yield by 10% and additional 2% for each level at the digging skill. Maxed out at 30%.

Ability: Saltpeter Digger
Increases saltpeter harvesting yield by 10% and additional 2% for each level at the digging skill. Maxed out at 30%.

Ability: Shovel Expert
Breaking a block with a shovel increases your digging speed with shovels by 1% and additional 0.1% for each level at the digging skill. Maxed out at 2%. This effect stacks up to 10 times and last 4 seconds.

Ability: Careful Digger
Digging with a shovel has a chance of 5% and additional 1% for each level at the digging skill to not reduce the durability of the shovel. The chance is capped at 15%.

Ability: Mixed Clay
While you harvest one type of clay you have a chance of 50% of getting an extra clay of an other type.

Ability: Digger
You will receive 40% more experience for all digging activities. The amount of professions you can learn is limited.

Ability: Scrap Detector
Every time you break a sand or gravel block there is a chance of 2% that the block breaks as if it was sieved with a pan.

Ability: Scrap Specialist
Increases the amount of rare items from your Scrap Detector ability by 150%.

Skill: Forestry

  Reveal hidden contents

Ability: Lumberjack
Increases the yield of wood from felling trees by 10% and additional 1% for each level at the forestry skill. Maxed out at 20%.

Ability: Afforestation
You will receive 10% more saplings from breaking leaves.

Ability: More Ladders!
Increases your ladders building capacity by giving you more sticks from breaking leaves. Of course you can also just burn them. You will receive 10% and additional 2% for each level at the forestry skill more sticks from breaking leaves. Maxed out at 30%.

Ability: Resin Farmer
Every time you cut down a pine there is a chance of 2% per wood log that it drips resin.

Ability: Tree Nursery
Planted trees only need 87% of the default time to grow.

Ability: Axe Expert
Breaking a block with an axe increases your tree felling speed with axes by 1% and additional 0.1% for each level at the forestry skill. Maxed out at 2%. This effect stacks up to 10 times and last 30 seconds.

Ability: Careful Lumberjack
Cutting a tree with an axe has a chance of 5% and additional 1% for each level at the forestry skill to not reduce the durability of the axe. The chance is capped at 15%.

Ability: Forester
You will receive 40% more experience for all foresting activities. The amount of professions you can learn is limited.

Ability: Charcoal Burner
You will receive 13% more charcoal from charcoal piles.

Ability: Resin Extractor
You have a chance to receive resin from every tree you cut down. The chance is 50% of the chance of your Resin Farmer ability.

Skill: Mining

  Reveal hidden contents

Ability: Stonebreaker
Increases the number of stones you receive by 10% and additional 2% for each level at the mining skill. Maxed out at 30%.

Ability: Stonecutter
Every time you break a rock you have a chance of 2% and additional 1% for each level at the mining skill to receive the raw rock instead of stones. Maxed out at 12%.

Ability: Ore Miner
Increases the number of ores you receive by 5% and additional 1% for each level at the mining skill. Maxed out at 15%.

Ability: Gemstone Miner
Increases the number of gemstones you receive by 5% and additional 1% for each level at the mining skill. Maxed out at 15%.

Ability: Pickaxe Expert
Breaking a block with a pickaxe increases your mining speed with pickaxes by 1% and additional 0.1% for each level at the mining skill. Maxed out at 2%. This effect stacks up to 10 times and last 4 seconds.

Ability: Careful Miner
Mining a stone or ore with a pickaxe has a chance of 5% and additional 1% for each level at the mining skill to not reduce the durability of the pickaxe. The chance is capped at 15%.

Ability: Miner
You will receive 40% more experience for all mining activities. The amount of professions you can learn is limited.

Ability: Crystal Seeker
Increases the effect of your Ore Miner ability for crystallized ores of 100%.

Ability: Bomberman
If you blow up rock or ores with a bomb there are 33% less drop penalties.

Ability: Geologist
Every time you break a rock you will be notified when there are ore blocks nearby. Higher tiers have a higher radius.

Ability: Blaster
Your Stonebreaker, Stonecutter, ore miner and gemstone miner abilities are also applied if you blow up rock or ores with bombs.

Skill: Husbandry

  Reveal hidden contents

Ability: Hunter
Increases the damage you deal to animals and reduces the damage animals deal to you by 10% and additional 0% for each level at the husbandry skill up to a maximum of 10%.

Ability: Butcher
Increases the meat yield from animals by 5% and additional 1% for each level at the husbandry skill up to a maximum of 15%.

Ability: Furrier
Increases the hide yield from animals by 5% and additional 1% for each level at the husbandry skill up to a maximum of 15%.

Ability: Bonebreaker
You can break carcasses to get bones. You receive 100% yield and additional 1% for each level at the husbandry skill up to a maximum of 120%.

Ability: Light-footed
Reduces the animal seeking range by -20%.

Ability: Shepherd
You will receive 40% more experience for the husbandry skill. The amount of professions you can learn is limited.

Ability: Tanner
Reduces the liquid consumption when tanning leather by 10% and additional 1% for each level at the husbandry skill up to a maximum of 20%.

Skill: Combat

  Reveal hidden contents

Ability: Swordsman
Increases the damage you deal with swords by 10% and additional 1% for each level at the combat skill. Maxed out at 20%.

Ability: Archer
Increases the damage you deal with bows by 10% and additional 1% for each level at the combat skill. Maxed out at 20%.

Ability: Spearman
Increases the damage you deal with spears by 10% and additional 1% for each level at the combat skill. Maxed out at 20%.

Ability: Tool Mastery
Increases the damage you deal with tools by 5% and additional 2% for each level at a corresponding skill. Capped at 25%. Pickaxes are affected by the mining skill, axes by the forestry skill, hammers by the metalworking skill, hoes by the farming skill and shovels by the digging skill.

Ability: Iron Fist
Increases damage you deal with your bare hands by 2 times multiplied by the average protection tier of your armor.

Ability: Looter
Increases the amount of drops you receive from mobs by 10% and additional 1% for each level at the combat skill. Capped at 20%.

Ability: Warrior
You will receive 40% more experience for killing enemies. The amount of professions you can learn is limited.

Ability: Sniper
Increases your accuracy with ranged weapons by 15%.

Ability: Fresh Flesh
Every time you kill an enemy you will receive 10 Protein saturation.

Ability: Shovel Knight
Every time you hit an enemy with a shovel you have a chance of 3% to deal a massive amount of damage.

Ability: Adrenaline Rush
If your health falls below 20% of your maximum health you will receive the adrenaline rush effect which increases your movement speed by 20% and reduces the incoming damage by 25% for 10 seconds. When this effects ends you will be exhausted for 24 seconds.

Ability: Vampire
Every time you hit an enemy you will receive 3% of the dealt damage as healing. But your health regeneration in the sunlight is reduced by up to 5%.

Ability: Burning Rage
Every time you hit an enemy you have a chance of 2% to ignite it.

Ability: Bloodlust
Every time you kill an enemy you will get one stack of the bloodlust effect. It increases your caused damage by 2% per stack and your received damage by 3% per stack. This effect can stack up to 10 times and lasts 16 seconds.

Skill: Metalworking

  Reveal hidden contents

Ability: Smelter
You need 10% less metal to fill a mold.

Ability: Metal Recovery
After finishing a metal work on an anvil you will receive one metal bit for every 4 splits you have done on the work.

Ability: Heating Hits
Every hit on a smithing work on an anvil will increase its temperature by 1°C.

Ability: Hammer Expert
After finishing a metal work on an anvil your hammer will get durability back. The returned durability corresponds to 5% and additional 1% for each level at the metalworking skill of the used durability. Maxed out at 15%.

Ability: Heavy Hits
Your heavy hits on slag works as a split.

Ability: Metalworker
You will receive 40% more experience for the metalworking skill. The amount of professions you can learn is limited.

Ability: Finishing Touch
You have a chance for every hit to instantly finish a smithing work. The more advanced the work, the greater the chance. The maximal chance is 1% and additional 0.1% for each level at the metalworking skill. This chance is capped at 2% per hit.

Ability: Duplicator
You have a chance of 5% and additional 0% for each level at the metalworking skill to receive a second identical item after finishing a metal work on an anvil. Maxed out at 5%. Does not affect some works, that have a smeltable product.

Ability: Salvager
You can now disassemble locust to get metal bits. You receive 95% and additional 1% for each level at the metalworking skill of the default yield. Capped at 110%.

Ability: Master Smith
Your heavy hits move up to 2 voxels to appropriate positions, instead of just spreading them.

Ability: Machine Learning
You can share your smithing knowledge with helve hammers and they can profit from some of your abilities.

Ability: Automated Smithing
Your helve hammers can work items with up to 1 layers.

Skill: Pottery

  Reveal hidden contents

Ability: Thrift
You will receive 3 more voxels for each clay you use for pottery.

Ability: Layer layer
When you are copying layers you will copy 1 additional voxels.

Ability: Perfect Fit
When you remove single voxels you can't remove right voxels.

Ability: Perfectionist
When you add single voxels you can't add a wrong voxel.

Ability: Potter
You will receive 40% more experience for the pottery skill. The amount of professions you can learn is limited.

Ability: Fast Potter
You have a chance for every step to instantly finish a pottering work. The more advanced the work, the greater the chance. The maximal chance is 1% and additional 0.1% for each level at the pottery skill. This chance is capped at 2% per step.

Ability: JackPot
You have a chance of 5% and additional 0% for each level at the pottery skill to receive a second identical item after finishing a pottery work. Maxed out at 5%.

Ability: Infallible
Increases the radius of your perfectfit and perfectionist abilities by 1. Tier 2 also affects layers.

Ability: Inspiration
When you burn a storage vessel, a flowerpot or a planter you have a chance of 5% to create a special variant.

Skill: Cooking

  Reveal hidden contents

Ability: Canteen Cook
You can cook 34% more servings at once.

Ability: Fast Food
You can cook 10% and additional 1% for each level at the cooking skill faster. Capped at 20%.

Ability: Well done
Increases the shelf life of your cooked servings by 5% and additional 1% for each level at the cooking skill. Capped at 15%. But it also increases the cooking time by 20%.

Ability: Dilution
Increases the number of servings you gain when cooking by 10% and additional 1% for each level at the cooking skill. Capped at 20%.

Ability: Desalinate
Allows you to fill a pot with water to cook salt. You need to fill all cooking slots with water to cook salt. You receive 1 salt for every 4*4 liters of water.

Ability: Chef
You will receive 40% more experience for the cooking skill. The amount of professions you can learn is limited.

Ability: Happy Meal
You have a chance of 10% and additional 1% for each level at the cooking skill to add an additional random valid ingredient when you cook a meal. Capped at 20%.

Skill: Temporal Adaptation

  Reveal hidden contents

Ability: Temporal Stable
Reduces the overall loss of temporal stability by 5% and additional 1% for each level at the temporal adaptation skill. Maxed out at 15%.

Ability: Caveman
Reduces the loss of temporal stability by up to 10% and additional 2% for each level at the temporal adaptation skill. The deeper you are the greater is the advantage. Maxed out at 30%.

Ability: Temporal Adapted
Reduces the loss of temporal stability by up to 10% and additional 2% for each level at the temporal adaptation skill. The lower your current stability is the greater is the advantage. Maxed out at 30%.

Ability: Temporal Recovery
Increases the recovery rate of your temporal stability by 50%.

Ability: Timelord
You will receive 40% more experience for the temporal adaptation skill. The amount of professions you can learn is limited.

Ability: Stable Miner
Increases your yield from all ores by up to 10% if you are in a temporal stable area.

Ability: Stable Warrior
Increases your dealt damage by up to 10% if you are in a temporal stable area.

Ability: Temporal Unstable
Your Stable Miner and Stable Warrior abilities will receive bonuses from temporal unstable areas instead of temporal stable areas and increases these bonuses by 33%.

 

Configuration

The mod creates automatically config files for every skill. You can usually find them in this directory or something similar: C:\Users\[UserName]\AppData\Roaming\VintagestoryData\ModConfig\XLeveling. The files are named after the skill they represent.
You can also find a xleveling.json there which contains some general configurations. Here is a list of the things you can configure and a short explanation what everything means:

  Reveal hidden contents

xleveling.json:

  •  unlearnCooldown: The time you have to wait until you can use the ability unlearn mechanic again in real time minutes. You can set this to 0 to disable the need to wait.
  • pointsForUnlearn: The number of unlearn points you need to decrease the tier of an ability. You can set this to 0 to disable the need for this points.
  • expLossOnDeath: The relative value of experience you lose when you die. Values lower than 1.0 means you lose experience relativ to your earned experience for the next level. Values greater than 1.0 means you lose experience relativ to the total experience you need for the next level. In this case the values are interpreted as a percentage value. Notice that you can never lose a skill level.
  • specialisationLimit: The base limit of specialisations/professions you can learn. Note that the number of specialisations can also be manipulated in other ways like an ability.
  • expMult: The base multiplier for the all experience you earn. 

[skill].json:

  • name, id: Internal values. Just ignore them.
  • maxLevel: The maximum level you can reach in this skill.
  • enabled: This value usually is always true. Set it to false to disable the skill. You can not earn experience in disabled skills and you can not use its abilities. Note that this does not remove any implementations of any skills or abilities for technical reasons.
  • experience: So this part seems to be very confusing. The experience values change the experience you need to reach the next skill level. They not influence the experience you receive. If you want to change the value of experience you receive you have to change the value for a specific action. E.G. a lot of experience gain values are set in behaviors directly in the mods folder.(xskills/assets/xskills/patches) You can change these values with json patching. For some skills like cooking or metalworking there are no values defined. This is because there are technical implemented very different than other skills. But usually the experience for these skills are calculated dynamically and only have one base value. So you can change the experience you need to level up a skill instead of changing this base value as it would have the same effect.
  • expEquation: This is the equation used to calculate the experience for a skill. Note that the equations take the level that you want to reach as an argument. So if you are level 1 you have to put 2 as level in the equation. Currently there are supported 3 different equations:
    • "quadratic": This is the default one for most skills: expValue * (level-2)^2 + (level-2) * expMult + expBase
    • "logarithmic": This is a logarithmic equation: ln(level - 1) * expMult + expBase
    • "exponential": This is a exponential equation: expMult^(level - 2) * expValue + expBase
  • expBase, expMult, expValue: These are the values that are used by the equations to calculate the needed experience. You need to look at the equations to see what each value does. An equation does not need to use all values.   
  • abilities: Each ability of a skill has an entry here to configure the ability.
    • name, id: Internal values again. Just ignore them. Are used to identify an ability. Changing them could result in unexpected behavior.
    • maxTier: The maximal tier of this ability. This does not effect requirements. If you want to change a  requirement you have to json-patch them.
    • minLevel: The skill level you need to learn this ability.
    • enabled: This value usually is always true. Set it to false to disable the ability. You can not use disabled abilities. Note that this does not remove any implementations of any abilities for technical reasons.
    • values: I think this one needs a little bit more explanation. Each ability has a set of values. This set somehow consist out of multiple subsets. Each subset represents one tier of the ability. Every ability needs a specific amount of values within each subset and each subset has the same number of values. So the number of total values in the set must always be a product of the number of values in each subset and the maximal tier. So the values look somehow like this: values = [subset0,subset1,...] = [[value0, value1,...],[value0, value1,...],...]. The position of a specific value in the set can be calculated by: tier * values per tier + value id. If you use a wrong number of values the mod will use the default values and will override the the values in the config file. But this is only important if you want to change the number of tiers of an ability. You can also just adjust a value of an ability. If you need a hint what value does effect what exactly you can look at the localisation files. They usually contain substrings like {0} which will be evaluated to the value with the id 0. So the first value in every subset.
  • attributes: Some skills can have skill specific settings here.
  • ClassExpMultipliers: Here are the experience multipliers for each class. You can just add new ones if you have a mod that adds new classes or just change the existing values.

Commands

This mod also adds some new commands to the game:

  Reveal hidden contents

level [get|set|add|reset ] [Player] [Skill] [Level]

Sets or gets the level of a specific skill of a specific player. You can also add a specific amount of levels to the skill or reset all tiers of all abilities of this skill to zero. You can set the player or the skill to 'all' to affect all players or skills. You can use reset config [skill]/all to reset a configuration file for a specific skill or all skills.

exp [get|set|add] [Player] [Skill] [Experience]

Sets or gets the experience of a specific skill of a specific player. You can also add a specific amount of experience to the skill.

tier [get|set|add] [Player] [Skill] [Ability] [Tier]

Sets or gets the tier of a specific ability of a specific skill of a specific player. You can also add a specific amount of tiers to the ability.

skillset [save|load|delete|default] [SkillSetName]

You can save the skill set of the current game with the save command. This will also set the skill set of the current game to the new saved one. You can use this to load the saved skill set with the load command. So you can use the same skill set for different save games. The delete command will delete a saved skill set and the default command will reset the skill set of the current game to its default save game specific skill set.

Installation

As any other mods just download the .zip folders and put them into your games mod folder. Do not unpack the .zip folders.

Uninstallation

If you want to uninstall the mod make sure you have no meals or meal containers such as crocks left in your world with more than 4 ingredients in it. You can receive these from the happy meal (cooking) ability. Meals with more than 4 ingredients in your world without the mod will crash your game. Unfortunately crocks seem to be affected by this even when they do not have more than 4 ingredients in it. So you may need to remove every crock.

FAQ

Q: Can i change the minimum skill level i need to learn this ability or the experience i need to reach a skill level?

A: Yes you can. For Questions like this i recommend to look at the configuration section of the mod post first.

Q: How can i get unleran points?

A: You can just search in the handbook for consumables that give unlearn points. The exact search term could be language specific. In general base game alcoholic drinks will give you unlearn points.

Q: Can i change the experience i get from mods or can i add experience to new modded mobs?

A: You can adjust the values in the mods json files and i think json patches shold work, too. You can find the file here: xskills/assets/xskills/patches/combat.json. You can also use this file as an example on how to add experience to new mobs.

Q: Can you release a version for the game version X. 

A: Probably: yes. But i only develop the mod for the newest game version. Providing support for older game versions would just be to much work. I may not be able to provide versions for every pre release version of the game since the game can change heavily between these updates and i sometimes need some time to adjust the code and sometimes i simply have not the time for this. So please wait at least 24 hours after the release of a game version before asking for a mod version for the game version.

Q: What does the all-rounder skill do?

A: First of all you can not choose another class with this ability. You can choose another XSkills Specialisation/Profession. These are a class of abilities that allows you to receive more experience for specific skills. By default you can just have one of these abilities. With the all-rounder ability you can have more than one. You can also identify these specialisation abilities by looking at the requirements in the tooltip. A few examples of these abilities are: farmer, miner, digger, metalworker.

Q: Why doesn't the smelter ability work for ingots?

A: You could easily create infinite metal loops. You would be able to smelt an ingot and get more material than one ingot costs.

Q: Why do I get lesser amounts of metal bits from some items?

A: The metalworking skill allows you to get more items with fewer costs. The mod reduces the amount of bits you receive for recycling these items to prevent infinity metal loops. You can configure this feature by setting the "chiselRecipesRatio" value in the metalworking config file. Set it to "1.0" to disable this feature.

Experience

In general you will get experience from doing skill related stuff. But since it was asked multiple times i will add a more detailed list here. 

  Reveal hidden contents
  • Survival: You will receive passive experience over time. But if you die you will lose a proportion of your earned experience.
  • Farming: You will receive experience from gathering fully grown crops. You can also get some experience from harvesting non fully grown crops as long as they still drop some products. You will not receive experience from harvesting pumpkins since you could just place and harvest them in an infinite loop. But you can get some experience from breaking their vines.
  • Digging: You will receive experience from breaking blocks like sand, dirt and gravel.
  • Forestry: You will receive experience from cutting down trees. Only grown tree logs will give you experience points. You will also get some experience from digging up charcoal pits.
  • Mining: You will receive experience from breaking ore and stone blocks.
  • Husbandry: You will receive experience from killing animals. You will get more experience from more domesticated animals. You will also get some experience for milking and feeding animals as well as collecting eggs from hen boxes..
  • Combat: You will receive experience from killing aggressive enemies.
  • Metalworking: You will receive experience from doing casts and smithing work.
  • Pottery: You will receive experience from creating objects with clay through the clay forming mechanics.
  • Cooking: You will receive experience from cooking meals in a pot over a fire pit.
  • Temporal Adaptation: You will receive passive experience from being in temporal unstable areas.

Translations

German and english translations by myself

Russian translation by @Digitalr, @Jay_

Polish translation by @Granolah

French translation by @Cendar

Japanese translation by @macoto_hino
 

Create your own skills

To add new skills or abilities to the game you should be able to code. Preferably in c# or a similar language.
I recommend to set up your development environment like described here and here.
Notice that a mod that uses XLib or code from any other mod always has to be a compiled mod. Your mod only needs to add a reference to the XLib library(.dll file) if you want to add abilities or skills. Note that you may have to unzip the file to get direct access to the .dll library.  The xlib.zip also contains a xlib.xml file. It contains the documentation for xlib and you may want to add this file to your references, too.
I think it is always the easiest to learn from examples. So i made an example skill that shows the most important features of XLeveling.
You can find this example in the download section. 

Downloads

The mod can now be downloaded through the mod db:

https://mods.vintagestory.at/show/mod/247

https://mods.vintagestory.at/show/mod/244

exampleskill.zip 10.67 kB · 972 downloads

 

Hey im from Spain and i love your mod idea, please can you send me your Git rep to check the lang and translate your files? I want to other people from my country use this mode confortable

Link to comment
Share on other sites

Have a suggestion for another useful skill for survival branch.

Steeplechase

Tier 1 allows increase step height to 1.2 (same as StepUp mod)

Tier 2 increase step height to 2.1 blocks. (Trained human can easy climb over 2m fence, so, imho, trained seraph can do this too)

I check this setup (with increased step height) by running intensively through mountain landscape. It is, literally, give you much more freedom of movement and increase travel speed.

Edited by Digitalr
Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.