Jump to content
Gr8

[TUTORIAL] Remove/Change Trading Animations (for faster trading)

Recommended Posts

This Tutorial will teach you how to alter/change or remove trader animations for faster trading

 

Requirements:
* Basic knowledge of unpacking pbo's
* Custom compiles
 
* Common sense
* Text Editor (notepad++)
 


Installation

 
(If you already have a compiles file, Skip to #4 please)
 
1) Open your dayz_mission.pbo and open init.sqf

 
Find:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf"; //Compile regular functions

Replace it with:

call compile preprocessFileLineNumbers "fixes\compiles.sqf"; //Compile regular functions

2) Now make a folder called fixes
 
3) copy this file into the fixes folder

..\Steam\SteamApps\common\Arma 2 Operation Arrowhead\@DayZ_Epoch\addonsdayz_code.pbo\init\compiles.sqf 

(if you already have a custom compiles.sqf, start here)
 
4) Open fixes/compiles.sqf
 
Find:


call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuHive.sqf";

Replace it with:

call compile preprocessFileLineNumbers "fixes\player_traderMenuHive.sqf";

5) Copy this file into your fixes folder

..\Steam\SteamApps\common\Arma 2 Operation Arrowhead\@DayZ_Epoch\addonsdayz_code.pbo\compile\player_traderMenuHive.sqf 

6)  Open fixes/player_traderMenuHive.sqf 
 
Find: 

_File = "\z\addons\dayz_code\actions\" + _afile + ".sqf";

Replace it with:

_File = "fixes\trade\" + _afile + ".sqf";

7) Make a folder called trade inside the fixes folder
 
8) Download the appropriate file for your server and extract them inside the traders folder

Epoch

Epoch With Zupa 1.1 Single Currency
Epoch With Soul's Edit

9) Repack and you're done :)
 
 

Configuration

 

If you leave the way you installed it, it will be ready to go on the server. On my version of code, instead of the medic animation, it will do a pickup or lean animation which is way quicker than the medic animation.
 
however if you want to modify it to your likings, you may do so very easily.
 
To Change the animation of trading
 
Open every file inside the fixes/trade folder
 
Find:

player playActionNow "PutDown";

and replace "PutDown" with any other animation you like. Check this link for almost all the arma animation
 
 
 
To Remove the animation of trading
 
Open every file inside the fixes/trade folder
 
Find:

player playActionNow "PutDown";

Remove the line whole line, to simple get rid of the animation.
 
 

 

 

 

Credits:

Zupa

PeterBeer

Share this post


Link to post
Share on other sites

Seems to be a cool idea but doesent work for me.

The animation doesent loop and u could buy just one Item.

 

Check the link for new files, replace it with yours, Loop is now working

Share this post


Link to post
Share on other sites

Hey! THX for ur fast reply!

I replace my old files with ur updated one.

Faster trading works now but there is a new problem!

I cant cancle the trade with moving. He still trade as long ur money is empty.

 

Do u have a solution for this?

 

THX!

Share this post


Link to post
Share on other sites

Yes, trade_cancel.sqf is missing. Looking through the files I see the eniter block for the loop and to cancel was modified.

 

Zero

 

EDIT: Also noticed trade metals was not included. Wonder if this will cause an issue when the trader converts your metals... gonna revert back to the original methos until these problems are sorted out. Great idea though and much better than original animation. Hope someone smarter than me can get this working properly.

 

EDIT2: Also not included is when players trade zombie guts for biomeat, Whiskey bottles for Tin Etc. Hope this helps get in right direction :)

Share this post


Link to post
Share on other sites

Thank you all for pointing out the bugs and glitches, 

 

Next release, i will include

 

trade_cancel

trade_metals

 

totally forgot about those :)

Share this post


Link to post
Share on other sites

Youre right, With a lack of a test server. I am struggling to make a stable version of this script :(

 

Its okay man! We will help test for you! I'd like to see this become a nice addition to our server and I know other people would too! Let me know what I can do! Keep up the good work! :)

 

Zero

Share this post


Link to post
Share on other sites

THX for the update but now when i buy something he start with the "PutDown" animation. i let him continue few times and then i move to concle the trade.

cancel works now but i have no Items in the inventory, no money was payed and it display the message "U have interrupt the trade"

Share this post


Link to post
Share on other sites

THX for the update but now when i buy something he start with the "PutDown" animation. i let him continue few times and then i move to concle the trade.

cancel works now but i have no Items in the inventory, no money was payed and it display the message "U have interrupt the trade"

 

Thanks for the update, will report to you with a new version soon :)

Share this post


Link to post
Share on other sites

I have the latest files installed on our server and it will continue to trade over 200m away from the trader without stopping. Im looking to find a way to make it cancel on each trade if that's okay with you, no guarantee's tho :)

Share this post


Link to post
Share on other sites

Hey,

 

Thanks for all the work so far, this is something i would really love on my server :) I can't get it to work though, i believe i have the latest files but it just kneels down and no trades occur, i had a bash at editing it myself but i tend to do round in circles logic wise till i forget where i am :/  i though t the error was:

        while {r_doLoop} do {
                _animState = animationState player;
                _isStarted = ["putdown",_animState] call fnc_inString;
                if (_isStarted) then {_started = true;};
                if(!_isStarted && !r_interrupt ) then {
                        player playActionNow "PutDown";
                        _isStarted = true;
                };
                if (_started && !_isStarted ) then {
                        r_doLoop = false;
                        sleep 1; // the amount of secs u want it to take to trade.
                        _finished = true;                      
                };
                if (r_interrupt) then {
                        r_doLoop = false;
                };
                sleep 0.1;
        };

As in if you follow it down:

 

_animState = hasvalue

_isStarted = true

_started = true

 

then the following 3 if statements in this r_doLoop dont address the case for both started and isstarted to be true and so nothing ever happens until you cancel out with an inturrupt. Also just trying to get my head around the reason for all this. When running this script i kneel down to do the putdown action but then never stand up again, i know medic animation is a loop, as in, the starting position for your character is the same as the ending one but this doesn't seem to be the case for the put down animation?

 

Is this possibly causing the line:

 

_isStarted = ["PutDown",_animState] call fnc_inString;

 

to always give a value and therefore this line:

 

if (_started && !_isStarted ) then {
 

to never be satisfied?

 

 

I thought this might be the case so i tried:

	while {r_doLoop} do {
		_animState = animationState player;
		_isStarted = ["PutDown",_animState] call fnc_inString;
		if (_isStarted) then {_started = true;};
		if(!_isStarted && !r_interrupt ) then {
			player playActionNow "PutDown";
			sleep 2;
			[objNull, player, rSwitchMove,""] call RE;
			player playActionNow "stop";
		};
		if (_started && !_isStarted ) then {
			_finished = true;
			r_doLoop = false;
		};
		if (r_interrupt) then {
			r_doLoop = false;
		};
		if (_started && _isStarted ) then {
			sleep 2;
			[objNull, player, rSwitchMove,""] call RE;
			player playActionNow "stop";
			_finished = true;
			r_doLoop = false;
		};
		sleep 0.1;
    };

To make it manually get up again after a certain amount of time like i think you were aiming for but now mine doesnt kneel in the first place lol, still says im trading though and never inturrupts...

 

Rambling aside I don't really know what i'm doing here, first attempt but i would love for this feature to work! :D

Share this post


Link to post
Share on other sites

HMM, have got it to work with a 2 second delay using the medic animation combination:

private ["_part_out","_part_in","_qty_out","_qty_in","_qty","_buy_o_sell","_textPartIn","_textPartOut","_bos","_needed","_started","_finished","_animState","_isStarted","_isMedic","_total_parts_out","_abort","_removed","_activatingPlayer","_traderID","_done"];
// [part_out,part_in, qty_out, qty_in,];

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_103") , "PLAIN DOWN"] };
DZE_ActionInProgress = true;
 
_activatingPlayer = player;
 
_part_out = (_this select 3) select 0;
_part_in = (_this select 3) select 1;
_qty_out = (_this select 3) select 2;
_qty_in = (_this select 3) select 3;
_buy_o_sell = (_this select 3) select 4;
_textPartIn = (_this select 3) select 5;
_textPartOut = (_this select 3) select 6;
_traderID = (_this select 3) select 7;
 
_bos = 0;
if(_buy_o_sell == "sell") then {
    _bos = 1;
};

_abort = false;
 
// perform number of total trades
r_autoTrade = true;
while {r_autoTrade} do {

	_removed = 0;

	// check if current magazine count is greater than 20

	if ((count (magazines player)) > 20) exitWith { cutText [(localize "STR_DAYZ_CODE_2"), "PLAIN DOWN"]; r_autoTrade = false};

	_canAfford = false;
	if(_bos == 1) then {

		//sell
		_qty = {_x == _part_in} count magazines player;
		if (_qty >= _qty_in) then {
			_canAfford = true;
		};

	} else {

		//buy
		_trade_total = [[_part_in,_qty_in]] call epoch_itemCost;
		_total_currency = call epoch_totalCurrency;
		_return_change = _total_currency - _trade_total; 
		if (_return_change >= 0) then {
			_canAfford = true;
		};
	};

	if(!_canAfford) exitWith {
		_qty = {_x == _part_in} count magazines player;
		_needed =  _qty_in - _qty;
		cutText [format[(localize "str_epoch_player_184"),_needed,_textPartIn] , "PLAIN DOWN"];
		r_autoTrade = false
	};

	cutText [(localize "str_epoch_player_105"), "PLAIN DOWN"];

	[1,1] call dayz_HungerThirst;
	player playActionNow "Medic";

	//_dis=20;
	//_sfx = "repair";
	//[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
	//[player,_dis,true,(getPosATL player)] spawn player_alertZombies;

	r_interrupt = false;
	_animState = animationState player;
	r_doLoop = true;
	_started = false;
	_finished = false;

	while {r_doLoop} do {
		_animState = animationState player;
		_isMedic = ["medic",_animState] call fnc_inString;
		if (_isMedic) then {
			_started = true;
			sleep 2;
			[objNull, player, rSwitchMove,""] call RE;
			player playActionNow "PlayerStand";
		};
		if (_started && !_isMedic) then {
			r_doLoop = false;
			_finished = true;
		};
		if (r_interrupt) then {
			r_doLoop = false;
		};
		sleep 0.1;
	};
	r_doLoop = false;

	if (!_finished) exitWith { 
		r_interrupt = false;
		if (vehicle player == player) then {
			[objNull, player, rSwitchMove,""] call RE;
			player playActionNow "stop";
		};
		cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
	};

	if (_finished) then {

		//diag_log format["DEBUG TRADER DONE?: %1", _canAfford];

		// Continue with trade.
		if (isNil "_part_in") then { _part_in = "Unknown Item" };
		if (isNil "inTraderCity") then { inTraderCity = "Unknown Trader City" };
		if(_bos == 1) then {
			// Selling
			PVDZE_obj_Trade = [_activatingPlayer,_traderID,_bos,_part_in,inTraderCity,_part_out,_qty_out];
		} else {
			// Buying
			PVDZE_obj_Trade = [_activatingPlayer,_traderID,_bos,_part_out,inTraderCity,_part_in,_qty_in];
		};
		publicVariableServer  "PVDZE_obj_Trade";

		if(_bos == 0) then {
			// only wait for result when buying
			waitUntil {!isNil "dayzTradeResult"};
			if(dayzTradeResult == "PASS") then {
				_done = [[[_part_in,_qty_in]],0] call epoch_returnChange;
				if (_done) then {
					for "_x" from 1 to _qty_out do {
						player addMagazine _part_out;
					};
					cutText [format[(localize "str_epoch_player_186"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"];
				};
			} else {
				_abort = true;
				cutText [format[(localize "str_epoch_player_183"),_textPartOut] , "PLAIN DOWN"];
			};
		} else {
			_part_inClass =  configFile >> "CfgMagazines" >> _part_in;
			_removed = _removed + ([player,_part_inClass,_qty_in] call BIS_fnc_invRemove);
			if (_removed == _qty_in) then {
				[[[_part_out,_qty_out]],1] call epoch_returnChange;
			};
			cutText [format[(localize "str_epoch_player_186"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"];
		};
		dayzTradeResult = nil;
	};
	if(_abort) exitWith {r_autoTrade = false};

	sleep 1;
};

DZE_ActionInProgress = false;

Weird thing is if I change the variables to PutDown / _isPutDown / putdown following the same formatting rules and capitalisation as for the medic one it doesn't work, Is the action in the DB capitalised differently from what I have listed do you think or doesn't matter?

 

At a loss really but at least it works with the medic animation at the moment. Obviously the "sleep 2;" line in the "r_doLoop" section can be changed to whatever you want the delay to be ^^

Share this post


Link to post
Share on other sites

Thanks Nieechi for explaining the logic, I was messing aroung on this too, found out that Animation cannot be interupted and to stop it you have to manually stand up. So i added that when the players moves it interupts the trading, but it looks like when doing the animation, the player moves so it cancels it upon trading. 

 

Then The only successful thing i did is to remove the animation and put a sleep timer instead, that works good so far. I have updated the files with no animation code. 

 

My buddy Zupa and me are trying to add a medic animation and stop it so it doesnt take too long to trade

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By icomrade
      Hello all,
      We are pleased to announce the release of ArmA 2 DayZ Epoch 1.0.6, available for download at: http://epochmod.com/a2dayzepoch.php
      This release introduces the integration of some of the most common Epoch community modifications from prior epoch release, DayZ Mod 1.8.8, and a new group system that persists in the database.  Most of the highlights can be found in the change log below, which is fairly comprehensive, but by no means exhaustive.
      Please note that community addons/expansions for previous Epoch release WILL NOT work on Epoch 1.0.6, be sure to review the change log for which mods are now included. In addition, the loot table format has completely changed, you must base your loot table modifications on the new format, which can be found by evaluating the stock loot tables: https://github.com/EpochModTeam/DayZ-Epoch/tree/Release_1.0.6/SQF/dayz_code/Configs/CfgLoot
      1.0.5.1 and older Single Currency scripts are NOT compatible with 1.0.6, there is no included single currency script in this release. However, because we are so wonderful, we have chosen to integrate single currency saving to the DB, so a third-party HiveEXT is not necessary and the SQF is all that needs to be written/updated.
       
    • By gle353
      Ever tired of zombies in your base glitching trouth the walls and hit you while building?
      Ever tried to stay safe for a short pipi-break at your base, come back and got eaten alive?

      Stop it now, Here is the solution!

      1. Open Init.sqf, serach for 

       
      if (DZE_R3F_WEIGHT) then {execVM "\z\addons\dayz_code\external\R3F_Realism\R3F_Realism_Init.sqf";}; and post below:

       
      [] execVM "custom\base_SafeArea.sqf"; Save and close Init.sqf. Now create a folder called "custom" if you dont have one. Now create a new SQF-File called "base_SafeArea.sqf".
      Open it and insert following code in it:
       
      //--------------------------------------------------------------------- // Epoch Base Safe Area // By MadMartyr // Modified from generic ZombieShield code by felixberndt and meat // http://opendayz.net/threads/prevent-zombie-spawning.8799/#post-32461 //--------------------------------------------------------------------- dayz_poleSafeArea = 40; //range of your plotpole safespace while {true} do { sleep 5; // No Zeds near Plot Poles _playerPos = getPos player; _nearPole = nearestObject [_playerPos, "Plastic_Pole_EP1_DZ"]; //You can replace the Plastic_Pole by any other item. Usefull for gemcrating if (!isNull _nearPole) then { _pos2 = getPos _nearPole; _zombies2 = _pos2 nearEntities ["zZombie_Base", dayz_poleSafeArea]; _count2 = count _zombies2; for "_i" from 0 to (_count2 -1) do { _zombie2 = _zombies2 select _i; deleteVehicle _zombie2; }; }; };
      You can change the Range by edit the dayz_poleSafeArea.
      If you use Alchemical Crafting, you can change the "Plastic_Pole_EP1_DZ" in any other placeable.





      All creadits goes to @MadMartyr for posting his code and @ebayShopper for adding the deleteVehicle idea, instead of porting away.

      Original Post:
       
       
    • By tyrant50187
      Im looking for the ability to add Script allowing Eyescan (retina scan) For Safe's and lockboxes, ether or, its something i havent found any script for but have found mentions and seen, any suggestions, links, or scripts are welcome, please Let me know!
    • By JakeQue
      Hi guys,
       
      I can't seem to find the heli fast rope / rappell script, I know it was active on the 1.0.5.1 and for arma 2 but not seen anything for recent.
       
      If anyone has a working plugin I would be much obliged! 
    • By Bloodthirsty
      Hey I just need some files for this server, any and all you guys can come up with and think it deserve post that shit in chat rn. I want to see some crazy ideas and additions if you got em :) Lets see what you guys can come up with

  • Advertisement
  • Supporters
  • Discord

×
×
  • Create New...