Jump to content

Nieechi

Member
  • Posts

    5
  • Joined

  • Last visited

Posts posted by Nieechi

  1. Awesome, thanks Gr8Boi

     

    The code I listed in my last post does that ("trying to add a medic animation and stop it so it doesn't take too long to trade") although its not very clean, it doesn't let you move and cancel until the 2 second timer is up and so from the middle of the trade till then end of that cycle you have to hold a direction in preparation for it, again, not sure why.

     

    I can imagine some panicky moments for first time users of the server when buying high value items in that scenario lol  I think I might prefer the no animation option so I'll try that out but if you can get a clean, shorter animation to work that would be perfect :)

  2. 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 ^^

  3. 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

×
×
  • Create New...