Jump to content

Forums Announcement

Read-Only Mode for Announcements & Changelogs

Dear Survivors, we'd like to inform you that this forum will transition to read-only mode. From now on, it will serve exclusively as a platform for official announcements and changelogs.

For all community discussions, debates, and engagement, we encourage you to join us on our social media platforms: Discord, Twitter/X, Facebook.

Thank you for being a valued part of our community. We look forward to connecting with you on our other channels!

Stay safe out there,
Your DayZ Team

Knightlore

Trying to reduce skinning time

Recommended Posts

Hi, 

I am fairly new to modding, just a coup,le of bog standard override to my name, however this time i am venturing into the actual coding override, I am trying to write an override to reduce skinning time when using a certain knife, However I am struggling to get it to reduce the skinning time, the knife works and i can spawn it so i know the CPP is being read however I cant seem to get the skinning time down, I was originally trying to pull a duration speed from the config.cpp but going down a simpler route, just cant get theover ride to work on the code, Any help apprieciated.

so I have a config set up with

class CfgPatches
{
	class WLD_Kitchen_Knife
	{
		units[]={};
		weapons[]={};
		requiredVersion=0.1;
		requiredAddons[]={"DZ_Data","DZ_Scripts"};
	};
};
class CfgMods
{
	class WLD_Kitchen_Knife
	{
		dir="WLD_Kitchen_Knife";
		hideName=1;
		hidePicture=1;
		name="WLD_Kitchen_Knife";
		credits="Knightlore";
		author="Knightlore";
		authorID="0";
		version="1.0";
		extra=0;
		type="mod";
		dependencies[]={"World"};
		class defs
		{
			class worldScriptModule
			{
				value="";
				files[]={"WLD_Kitchen_Knife/4_world"};
			};
		};
	};
};

Pointing to scripts folder - WLD_Kitchen_Knife\Addons\4_world\Classes\UserActionsComponent\Actions\Continuous\ActionSkinningCB.c

This has 

modded class ActionSkinningCB : ActionContinuousBaseCB

{
	override void CreateActionComponent()
	{
		float time_spent;
		time_spent = UATimeSpent.SKIN;
		time_spent = time_spent / 4;
		m_ActionData.m_ActionComponent = new CAContinuousTime(time_spent);
	}
};

This should reduce UATimeSpent.Skin by a factor of 4 (I think). UTimeSpent.Skin is set as a constant 10 in the dayz main config

As a reference the first part of the actual dayz file is 

class ActionSkinningCB : ActionContinuousBaseCB
{
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.SKIN);
	}
}

Anyone see why this doesnt work,

TIA

Edited by Knightlore
spelling

Share this post


Link to post
Share on other sites
4 hours ago, Knightlore said:

Hi, 

I am fairly new to modding, just a coup,le of bog standard override to my name, however this time i am venturing into the actual coding override, I am trying to write an override to reduce skinning time when using a certain knife, However I am struggling to get it to reduce the skinning time, the knife works and i can spawn it so i know the CPP is being read however I cant seem to get the skinning time down, I was originally trying to pull a duration speed from the config.cpp but going down a simpler route, just cant get theover ride to work on the code, Any help apprieciated.

so I have a config set up with


class CfgPatches
{
	class WLD_Kitchen_Knife
	{
		units[]={};
		weapons[]={};
		requiredVersion=0.1;
		requiredAddons[]={"DZ_Data","DZ_Scripts"};
	};
};
class CfgMods
{
	class WLD_Kitchen_Knife
	{
		dir="WLD_Kitchen_Knife";
		hideName=1;
		hidePicture=1;
		name="WLD_Kitchen_Knife";
		credits="Knightlore";
		author="Knightlore";
		authorID="0";
		version="1.0";
		extra=0;
		type="mod";
		dependencies[]={"World"};
		class defs
		{
			class worldScriptModule
			{
				value="";
				files[]={"WLD_Kitchen_Knife/4_world"};
			};
		};
	};
};

Pointing to scripts folder - WLD_Kitchen_Knife\Addons\4_world\Classes\UserActionsComponent\Actions\Continuous\ActionSkinningCB.c

This has 


modded class ActionSkinningCB : ActionContinuousBaseCB

{
	override void CreateActionComponent()
	{
		float time_spent;
		time_spent = UATimeSpent.SKIN;
		time_spent = time_spent / 4;
		m_ActionData.m_ActionComponent = new CAContinuousTime(time_spent);
	}
};

This should reduce UATimeSpent.Skin by a factor of 4 (I think). UTimeSpent.Skin is set as a constant 10 in the dayz main config

As a reference the first part of the actual dayz file is 


class ActionSkinningCB : ActionContinuousBaseCB
{
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.SKIN);
	}
}

Anyone see why this doesnt work,

TIA

So instead of blah-blah-blah what's your problem?

No need to write a poem how you wanted your summer, just the question, facts and code it's not so hard.

Share this post


Link to post
Share on other sites
Spoiler

 

4 hours ago, Knightlore said:

Hi, 

I am fairly new to modding, just a coup,le of bog standard override to my name, however this time i am venturing into the actual coding override, I am trying to write an override to reduce skinning time when using a certain knife, However I am struggling to get it to reduce the skinning time, the knife works and i can spawn it so i know the CPP is being read however I cant seem to get the skinning time down, I was originally trying to pull a duration speed from the config.cpp but going down a simpler route, just cant get theover ride to work on the code, Any help apprieciated.

so I have a config set up with



class CfgPatches
{
	class WLD_Kitchen_Knife
	{
		units[]={};
		weapons[]={};
		requiredVersion=0.1;
		requiredAddons[]={"DZ_Data","DZ_Scripts"};
	};
};
class CfgMods
{
	class WLD_Kitchen_Knife
	{
		dir="WLD_Kitchen_Knife";
		hideName=1;
		hidePicture=1;
		name="WLD_Kitchen_Knife";
		credits="Knightlore";
		author="Knightlore";
		authorID="0";
		version="1.0";
		extra=0;
		type="mod";
		dependencies[]={"World"};
		class defs
		{
			class worldScriptModule
			{
				value="";
				files[]={"WLD_Kitchen_Knife/4_world"};
			};
		};
	};
};

Pointing to scripts folder - WLD_Kitchen_Knife\Addons\4_world\Classes\UserActionsComponent\Actions\Continuous\ActionSkinningCB.c

This has 



modded class ActionSkinningCB : ActionContinuousBaseCB

{
	override void CreateActionComponent()
	{
		float time_spent;
		time_spent = UATimeSpent.SKIN;
		time_spent = time_spent / 4;
		m_ActionData.m_ActionComponent = new CAContinuousTime(time_spent);
	}
};

This should reduce UATimeSpent.Skin by a factor of 4 (I think). UTimeSpent.Skin is set as a constant 10 in the dayz main config

As a reference the first part of the actual dayz file is 



class ActionSkinningCB : ActionContinuousBaseCB
{
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.SKIN);
	}
}

Anyone see why this doesnt work,

TIA

I was able to reduce amount of your blah-blah blah to get the idea of the question.
Here the solution:
1. If you wish make something faster - no need create clocks, need to redefine timeouts!
So for that case you have 2 way for resolving:
Case 1: Global reduce time by modify the Constant:
DayZ\dta\scripts\4_World\Classes\UserActionsComponent\Actions\ActionConstants.c

/**@class	Constants for Time spent while doing action*/
modded class UATimeSpent {
    /* Another constants that's I don't cares, but you better safe them for something */
	const float SKIN = 10; // <- in 1.26 default value is 10, set 4 or idk how many you prefer and IT DEFINED AS CONST, so you can't redefine it in runtime by assign.
}

Case 2: If you don't want to create duplicate of class - redefine the timeout on action (your code is almost right, but wrong overriding, try this way):

modded class ActionSkinningCB {	// You're only modifing the existing callback class, when you define parent - you're redefiend the class and that can mess up the game
	override void CreateActionComponent() {
		float time_spent = UATimeSpent.SKIN;
		time_spent = time_spent / 4;
		m_ActionData.m_ActionComponent = new CAContinuousTime(time_spent);
	}
};

Let me know about results 🙂

Share this post


Link to post
Share on other sites

Thanks for the help. But no joy, still not working, 🙁 I used case 2

Edited by Knightlore

Share this post


Link to post
Share on other sites
modded class ActionSkinningCB : ActionContinuousBaseCB
{
    override void CreateActionComponent()
    {
        m_ActionData.m_ActionComponent = new CAContinuousTime( GetDefaultTime() );
    }
    
    float GetDefaultTime()
    {
        string item_type = m_ActionData.m_MainItem.GetType();
        
        switch(item_type)
        {
            case "CombatKnife": //Refers to whichever item you're using, I think most knives in the vanilla scripts extend toolbase so each one will have a spot in this script if you want to cut down the time. I.E., BoneKnife, KitchenKnife, Cleaver, CrudeMachete, FangeKnife, FireFighterAxe, etc. Here's a couple of examples
                return 5.0; // In seconds
            break;
        
            case "HuntingKnife": 
                return 5.0;
            break;
            
            case "KitchenKnife": 
                return 5.0;
            break;

            default:
                return UATimeSpent.SKIN;
            break
        }
        return -1;
    }
}

Note: Will not work if other mods are using the same script, for they will conflict. Using ToolBase as a case will also brick the script and cause infinite cutting times because there is no item_type for ToolBase. 

If anybody is familiar with overriding the original script I would be very thankful if you could share it so I could implement it on my server. I've tried a few ways but I'm not super familiar with coding. 

Edited by Brennie Boi
Added referencing
  • Thanks 1

Share this post


Link to post
Share on other sites

×