Jump to content

wyattwic

Member
  • Content Count

    275
  • Joined

  • Last visited

  • Medals

Posts posted by wyattwic


  1. I am having this same issue with the Civi box truck, HEMTT Covered transport and HEMTT Box.

    The HEMTT Box is the only one that uses a proxy model, so I can understand why there is no hiddenselection for it, but the others are not in the same situation.

    Maybe a dev could tell us if were missing something?

    ---------- Post added at 07:37 ---------- Previous post was at 07:31 ----------

    I may be able to do a work around, but I have no idea how its going to impact performance. I could texture "usertexture" and "attachto" the vehicle. Id rather not do that though...


  2. Redstone, im having a hard time understanding what you meant.

    I am aware that containers_02_set_co.paa is the container in question, but I am unable find the selection for replacement.

    ---------- Post added at 07:29 ---------- Previous post was at 06:45 ----------

    Redstone, im having a hard time understanding what you meant.

    I am aware that containers_02_set_co.paa is the container in question, but I am unable find the selection for replacement. I am having issues locating the rear section of the HEMTT Box, Covered transport, Civilian Box-Van.

    I have changed textures to null, one section at a time, and I cant find it.


  3. Giving that a try now

    ---------- Post added at 07:20 ---------- Previous post was at 06:42 ----------

    No success. I attempted to set every texture on the vehicle, one by one, to transparent and I was not able to locate the damn box. It has a PAA and there is no indication of it being a proxy model, so im lost. Attempted the same with the covered transport HEMITT.

    BIS Dev help would be appreciated! ANY HELP would be appreciated!


  4. Hey everyone!

    I am attempting to put a texture on "C_Van_01_box_F", however the section of texture I am editing, I can not find.

    Arma3_CfgVehicles_C_Van_01_box_F.jpg

    I am attempting to replace "van_01_adds_co.paa" on that vehicle but when it comes time to set the texture, I cant seem to find the proper selection number. I have attempted 0 through 5 with no luck.

    Screenshot of original PAA referred to - https://dl.dropboxusercontent.com/u/61911880/Capture1.PNG (773 kB)

    Below is my PAA and the final vehicle init I attempted. The texture is in the proper location in the mission, its just that section number.

    Init

    this setObjectTexture [5,"textures\van_01_adds_co.paa"];

    Modified PAA - https://dl.dropboxusercontent.com/u/61911880/van_01_adds_co.paa

    Screenshot of modified PAA - https://dl.dropboxusercontent.com/u/61911880/Capture2.PNG

    Any ideas would be a huge help. Im stumped.

    ---------- Post added at 17:46 ---------- Previous post was at 17:44 ----------

    In addition, This vehicle randomly selects if it should be red or white. Would anyone know how to make it always red? Im assuming you address the texture in the Soft_F PBO, but I dont know how to address between PBOs.


  5. Here is the best suggestion I can think of. Modify my script to save the proper data.

    You are free to use this as you wish, just please leave the original credits.

    //Wyatt's score management script
    /*
    This script saves players data every 2 minutes.  When players reconnect to the game, their data is recovered.
    */
    
    //Create the array if it does not already exist.
    
    private ["_id","_present","_s","_debugcount"];
    if (isnil "GlobalDataStorageArray0") then {GlobalDataStorageArray0 = []; if (rundebug) then {diag_log text format["scoresave.sqf - GlobalDataStorageArray0 array created."];};};
    
    _present = false; //Declare variable false
    _id = getPlayerUID (vehicle player);  //Get player ID and add to variable
    
    
    //Lets check and see if the player is currently in our array!  If he is in our array, we will give him his score back.
    {
        if ( (_x select 0) == (_id) ) exitWith
        {
           _present = true; //If the _id is found in the array, then set the _present var to true!
    	player addScore (_x select 1);
    	if (rundebug) then {diag_log text format["scoresave.sqf - %1 score has been recovered with ID %2", player, _x];};
    	Hint "Welcome back! \nYour score has been recovered.";
    	sleep 2;
    	Hint "";
        };
    } foreach GlobalDataStorageArray0;
    
    
    //If the player is not in the array, add him to the array then broadcast!
    if (!_present) then
    {
        GlobalDataStorageArray0 = GlobalDataStorageArray0 + [ [_id, score player] ];
        publicVariable "GlobalDataStorageArray0";
     if (rundebug) then {diag_log text format["scoresave.sqf - New player, %1, has been added to the score save array with ID %2 and has been pushed public.", player, _id];};
    };
    
    
    //Score save loop!
    for [{_s=0},{_s<1},{_s=_s}] do
    {
       sleep 100+(random 40); //Wait approx. 2 mins +/- 20 seconds
        {
             if ( (_x select 0) == (_id) ) exitWith
             {
                  _x set [1, score player]; //Put the player's current score in the array
    		   if (rundebug) then {diag_log text format["scoresave.sqf - %1 score has been UPDATED with the following information %2", player, _x];};
             };
        } foreach GlobalDataStorageArray0;
        publicVariable "GlobalDataStorageArray0";
    if (rundebug) then {
    if (isnil "_debugcount") then {_debugcount = 0};
    _debugcount = _debugcount + 1;
    diag_log text format["scoresave.sqf - Infinite loop in script has reached its goal.  Loop has reached a count of %1", _debugcount];};
    };
    if (rundebug) then {diag_log text format["scoresave.sqf - DANGER! The script should have not made it here due to the infinite loop.  This is the end of the script."];};
    

    Note that for all my scripts, I have rundebug = true or false in the init script. For this script, just add that near the top.


  6. Updated and working version.

    Works flawlessly on JIP!

    DEDICATED SERVER ONLY!

    //[AWG] Wyatt's time management script
    /*	Disambiguation:
    	This script is made to manage a few key game play features.
    		- Game starting time
    		- Fast time (We will use setdate to avoid clouds skipping around)
    
    	Start time:  I want to keep this option simple.   I will give them the options of 
    	sunrise, noon, sunset, midnight.
    
    	Fast time: I know there has to be over a dozen different published ways to forward
    	through time.  This script uses the more complex setdate wich in contrast to skiptime, advances players through time 
    	without the lower clouds jumping around.   Forecast and clouds stay the same.
    
    Important notes and operation methodology:
    	This script must be started via the global init file as it must be ran on the
    	server as well as the client.
    	Clients will check with the server every 10 minutes to make sure that the client
    	time is correct and to avoid dsync.
    */
    private ["_date","_tm","_ct","_min","_hour","_day","_month","_year","_time"];//Set game time in accordance to parameters.  JIP ready! XD
    if (isDedicated && isServer) then {
    PublicServerTime = date; 
    PublicServerTime set [3,E_starttime];
    publicvariable "PublicServerTime"; 
    setdate PublicServerTime;
    if (rundebug) then {_time = PublicServerTime select 3; diag_log text format["timekeeper.sqf - Server - Initial time sync has been pushed to clients as hour %1.",_time]; _time = "";};
    };
    
    
    if (!isDedicated && !isServer) then {
    waituntil {!isnil "PublicServerTime"};
    setdate PublicServerTime;
    if (rundebug) then {diag_log text format["timekeeper.sqf - Client - Initial time sync completed with server - %1 - %2", PublicServerTime, E_starttime];};
    };
    
    //Fast time
    if (E_fasttime == 0) then {  /*Parameters requested no fast time.   24 hours in real life, 24 hours in game.  This if statement is here for good coding practices and debug log purposes.*/
    if (rundebug) then {diag_log text format["timekeeper.sqf - Fasttime parameter returned %1.  Fast time will not run.",E_fasttime];};
    } else {
    if (rundebug) then {diag_log text format["timekeeper.sqf - Fast time is running with a modifier of 1 to %1.",E_fasttime];};
    _tm = E_fasttime;	/*Set time multiplier into local variable.*/
    _ct = 0;				/*loop counter.  Used for counting the minutes since last server sync.*/
    	while {true} do {
    		sleep 60; 				/*Sleep one minute*/
    		_date = date;			/*Get the date/time*/
    
    		_min = _date select 4;	/*Turn the date array into something we can easily manipulate.*/
    		_hour = _date select 3;
    		_day = _date select 2;
    		_month = _date select 1;
    		_year = _date select 0;
    
    		_min = _min + _tm;
    
    		//The following are setdate syntax checks.
    		if (_min > 59) then {_min = _min - 60; _hour = _hour + 1;/*If minutes added go out of date range, modify hours as needed.*/
    			if (_hour > 23) then {_hour = _hour - 24; _day = _day + 1;/*If hours go out of date range, modify days as needed.*/
    				if (_day > 31) then {_day = _day - 30;_month = _month + 1;/*If days go out of date range, modify months as needed.*/
    					if (_month > 12) then {_month = _month - 12; _year = _year + 1;/*If months go out of range, modify year as needed.*/
    		};	};	};	};   /*If statement, inside if statement, etc.   Thought process is, if we don't have to fix minutes, we don't have to fix hours and so on.*/
    
    		setdate [_year,_month,_day,_hour,_min]; /*Use setdate to set the manipulated date.*/
    
    		/*everything from this point on is to prevent clients from dsyncing too much.*/
    		_ct=_ct+1; /*This is the master sync control counter.  Adds 1 every cycle.*/
    		if (_ct >= 10) then {  
    			if (isDedicated && isServer) then {PublicServerTime = date; publicvariable "PublicServerTime"; if (rundebug) then {diag_log text format["timekeeper.sqf - Server - Time sync has been pushed to clients."];};};
    			sleep (random 15);
    			if (!isDedicated && !isServer) then {setdate PublicServerTime; if (rundebug) then {diag_log text format["timekeeper.sqf - Client - Time sync completed with server"];};};
    			_ct = 0;
    		};
    	};
    };

    Relevant description.ext entries.

    	class E_starttime {
         	title="Time Of Day";
    	values[]={6,12,18,0};
    	texts[]={"Sunrise","Noon","Sunset","Midnight"};	
    	default = 6;
    };
    class E_fasttime {
         	title="Fast Time";
    	values[]={0,4,8,24,48};
    	texts[]={"Disabled","6 Hour days","3 Hour days","1 Hour days","Half hour days"};	
    	default = 8;
    };


  7. Purepassion - The M107 anti tank is going to be used as a special ability for a sniper in one of my game modes. He will be limited to firing a sabot round from his gun once every so often.

    Rydygier - Thanks! I will give it a quick test soon and let you know of the outcome!

    ---------- Post added at 06:13 ---------- Previous post was at 05:06 ----------

    Given I made a few modifications, Its working!

    The following code, when applied to a units init scrip, will replace the end result with the one specified.

    In the example of the KSVK, bullet maintains its standard trajectory and ricochet properties. Upon impact it changes into the desired effect. In this case, a tank SABOT round.

    this addeventhandler ["fired",{
    _btype = _this select 1;
    if (_btype == "ksvk" or _btype == "m107") then {
       _velo = velocity (_this select 6);
    _dir = getdir (_this select 6);
    _pos = getpos (_this select 6);
    _vect = vectorDir (_this select 6);
    deleteVehicle (_this select 6);
    
    _dX = 1 * (sin _dir);
    _dY = 1 * (cos _dir);
    
    _px = (_pos select 0) + _dX;
    _py = (_pos select 1) + _dY;
    
    _bullet = "Sh_120_SABOT" createVehicle [0,0,50];
    _bullet setpos [_px,_py,(_pos select 2)];
    _bullet setvelocity _velo;
    _bullet setvectordir _vect;  
    };}];

    By no means is this script made to be ran in a production environment as is. This snippet is simply a doorway into what you can expand upon.

    ---------- Post added at 06:27 ---------- Previous post was at 06:13 ----------

    Okay, more questions!

    Is there a way to detect if a players binoculars are being looked through? How can I get the position he is looking at?


  8. Well, I am still stumped.

    I have used "this addeventhandler ["fired",{_this set [6, "Sh_120_SABOT"]}];" with no success, and no errors.

    Considering that the bullet is spawned as a vehicle, I think this may be much harder. Here is the process I am currently thinking of. If someone knows an easier way, let me know.

    1. Get bullets position, speed, direction, etc.

    2. Delete bullet.

    3. Create "Sh_120_SABOT"

    4. Apply position, speed, direction, etc.

    ---------- Post added at 19:35 ---------- Previous post was at 18:12 ----------

    Okay, I have made some progress, not much though.

    My current issue with this, is that the player firing dies instantly.

    It looks like the round is impacting the unit that fires, that or recoil is killing him.

    Help?

    this addeventhandler ["fired",{
    
    _velo = velocity (_this select 6);
    _vect = vectordir (_this select 6);
    _pos = getpos (_this select 6);
    deleteVehicle (_this select 6);
    
    _bullet = "Sh_120_SABOT" createVehicle _pos;
    _bullet setpos _pos;
    _bullet setvelocity _velo;
    _bullet setvectordir _vect;
    }];

    ---------- Post added at 20:30 ---------- Previous post was at 19:35 ----------

    I figured out that problem, but a new one arrises.

    Is there any way to get the position of a player, plus one meter to his front? I know how to move it in accordance with the poles, but I need it in accordance with the players direction.


  9. Okay, I messed up on providing instructions...

    For all intents and purposes, you should not be modifying the storage array for any real reason. The storage array works as an array inside an array, first segment being the players ID and the second being the saved value. You simply can not subtract an integer from a whole array, containing nothing but arrays.

    For situations that you have to add or remove score, use "player addScore 10;" or "player addScore -10;". The script currently saves the local players score every two minutes, then pushes it out on a public variable for recovery later.

    The below script is set up to read the variable "mymoney" every two minutes, and upon reconnect it should restore your score.

    Note on storage of variables. Variables to be stored can not be local/private variables due to the fact that upon restoration, the data will not leave the script.

    You can store any global variable or object specific variable quite easily. On another note, if you were saving how much cash a player has, it would be recommended to use "player setVariable [mymoney, 1000]" and "player getvariable "mymoney";".

    //Wyatt's score management script
    /*
    This script saves players scores every 2 minutes.  When players reconnect to the game, their score is recovered.
    */
    
    //Create the array if it does not already exist.
    
    private ["_id","_present","_s","_debugcount"];
    if (isnil "DataStorageArray0") then {DataStorageArray0 = []; if (rundebug) then {diag_log text format["scoresave.sqf - DataStorageArray0 array created."];};};
    
    _present = false; //Declare variable false
    _id = getPlayerUID (vehicle player);  //Get player ID and add to variable
    
    
    //Lets check and see if the player is currently in our array!  If he is in our array, we will give him his data back.
    {
        if ( (_x select 0) == (_id) ) exitWith
        {
           _present = true; //If the _id is found in the array, then set the _present var to true!
    	mymoney = (_x select 1);
    	if (rundebug) then {diag_log text format["scoresave.sqf - %1 data has been recovered with ID %2 - %3", player, _x, (_x select 1)];};
    	Hint "Welcome back! \nYour data has been recovered.";
    	sleep 2;
    	Hint "";
        };
    } foreach DataStorageArray0;
    
    
    //If the player is not in the array, add him to the array then broadcast!
    if (!_present) then
    {
        DataStorageArray0 = DataStorageArray0 + [ [_id, mymoney] ];
        publicVariable "DataStorageArray0";
     if (rundebug) then {diag_log text format["scoresave.sqf - New player, %1, has been added to the score save array with ID %2 and has been pushed public.", player, _id];};
    };
    
    
    //Score save loop!
    for [{_s=0},{_s<1},{_s=_s}] do
    {
       sleep 100+(random 40); //Wait approx. 2 mins +/- 20 seconds
        {
             if ( (_x select 0) == (_id) ) exitWith
             {
                  _x set [1, mymoney]; //Put the player's current data in the array
    		   if (rundebug) then {diag_log text format["scoresave.sqf - %1 score has been UPDATED with ID %2 and score %3", player, _x, score player];};
             };
        } foreach DataStorageArray0;
        publicVariable "DataStorageArray0";
    if (rundebug) then {
    if (isnil "_debugcount") then {_debugcount = 0};
    _debugcount = _debugcount + 1;
    diag_log text format["scoresave.sqf - Infinite loop in script has reached its goal.  Loop has reached a count of %1", _debugcount];};
    };
    if (rundebug) then {diag_log text format["scoresave.sqf - DANGER! The script should have not made it here due to the infinite loop.  This is the end of the script."];};
    

    To run this script, place the following in your init.sqf.

    if (!isDedicated && !isServer) then {
    if (rundebug) then {diag_log text format["Init.sqf - Is client returns true."];};
    _nil = [] execvm "Client\scoresave.sqf";  //You can use additional lines here for other client only scripts.
    };

    I have not tested this variant of the script, however it should work in the same nature as my score save script.

    ---------- Post added at 15:47 ---------- Previous post was at 15:46 ----------

    Note! This script is made to be ran in a dedicated server environment!

    ---------- Post added at 16:01 ---------- Previous post was at 15:47 ----------

    Another note, if you need more data stored, expand upon the interal arrays.

    //Expand upon the recovery portion
    mymoney = (_x select 1);  //Your money
    player addscore (_x select 2);  //Your score
    player setVariable [These_pewpewpoints_are_in_player_namespace, (_x select 3)];  //Whatever you want, etc!

    //Expand upon the new player portion
    _pewpewpoints = player getvariable "These_pewpewpoints_are_in_player_namespace";
    DataStorageArray0 = DataStorageArray0 + [ [_id, mymoney, score player, _pewpewpoints] ];
    _pewpewpoints = "";

    //Expand upon the frequent variable save function
    _pewpewpoints = player getvariable "These_pewpewpoints_are_in_player_namespace";
    _x set [1, mymoney, score player, _pewpewpoints]; //Put the player's current data in the array
    _pewpewpoints = "";

    I suggest you nil out any extra variables you have to place for housecleaning purposes.


  10. Hello everyone!

    Just for the hell of it, I wanted to create my own fast time script. At the time of this posting, I have not tested it yet, but I will have it tested in a hour or so.

    If anyone sees any issues, please let me know!

    //[AWG] Wyatt's time management script
    /*	Disambiguation:
    	This script is made to manage a few key game play features.
    		- Game starting time
    		- Fast time (We will use setdate to avoid clouds skipping around)
    
    	Start time:  I want to keep this option simple.   I will give them the options of 
    	sunrise, noon, sunset, midnight.
    
    	Fast time: I know there has to be over a dozen different published ways to forward
    	through time.  This script uses the more complex setdate wich in contrast to skiptime, advances players through time 
    	without the lower clouds jumping around.   Forecast and clouds stay the same.
    
    Important notes and operation methodology:
    	This script must be started via the global init file as it must be ran on the
    	server as well as the client.
    	Clients will check with the server every 10 minutes to make sure that the client
    	time is correct and to avoid dsync.
    */
    private ["_run","_startdate"];
    _run = true;
    _startdate = date;
    
    //Set game time in accordance to parameters.
    setdate [(_startdate select 0),(_startdate select 1),(_startdate select 2),E_starttime,(_startdate select 4)];
    _startdate = "";
    
    
    //Fast time
    private ["_date","_tm","_ct","_min","_hour","_day","_month","_year"];
    if (E_fasttime == 0) then {  /*Parameters requested no fast time.   24 hours in real life, 24 hours in game.  This if statement is here for good coding practices and debug log purposes.*/
    if (rundebug) then {diag_log text format["timekeeper.sqf - Fasttime parameter returned %1.  Fast time will not run.",E_fasttime];};
    } else {
    if (rundebug) then {diag_log text format["timekeeper.sqf - Fast time is running with a modifier of 1 to %1.",E_fasttime];};
    _tm = E_fasttime;	/*Set time multiplier into local variable.*/
    _ct = 0;				/*loop counter.  Used for counting the minutes since last server sync.*/
    	while {_run} do {
    		sleep 60; 				/*Sleep one minute*/
    		_date = date;			/*Get the date/time*/
    
    		_min = _date select 4;	/*Turn the date array into something we can easily manipulate.*/
    		_hour = _date select 3;
    		_day = _date select 2;
    		_month = _date select 1;
    		_year = _date select 0;
    
    		_min = _min + _tm;
    
    		//The following are setdate syntax checks.
    		if (_min > 59) then {_min = _min - 60; _hour = _hour + 1;/*If minutes added go out of date range, modify hours as needed.*/
    			if (_hour > 23) then {_hour = _hour - 24; _day = _day + 1;/*If hours go out of date range, modify days as needed.*/
    				if (_day > 31) then {_day = _day - 30;_month = _month + 1;/*If days go out of date range, modify months as needed.*/
    					if (_month > 12) then {_month = _month - 12; _year = _year + 1;/*If months go out of range, modify year as needed.*/
    		};	};	};	};   /*If statement, inside if statement, etc.   Thought process is, if we don't have to fix minutes, we don't have to fix hours and so on.*/
    
    		setdate [_year,_month,_day,_hour,_min]; /*Use setdate to set the manipulated date.*/
    
    		/*everything from this point on is to prevent clients from dsyncing too much.*/
    		_ct=_ct+1; /*This is the master sync control counter.  Adds 1 every cycle.*/
    		if (_ct >= 10) then {  
    			if (isDedicated && isServer) then {PublicServerTime = date; publicvariable "PublicServerTime"; if (rundebug) then {diag_log text format["timekeeper.sqf - Server - Time sync has been pushed to clients."];};};
    			sleep (random 15);
    			if (!isDedicated && !isServer) then {setdate PublicServerTime; if (rundebug) then {diag_log text format["timekeeper.sqf - Client - Time sync completed with server"];};};
    			_ct = 0;
    		};
    	};
    };


  11. Sneakers, if your goal is to save the variable so that the player can recover it on reconnect, here is a script I have that can help.

    The following script should be ran by all clients. It will save their data to a public variable array and will load it back to the client when they reconnect.

    Replace the score portion with the variable you would like saved/restored.

    This script has not been tested yet. Please let me know if you encounter any issues. Squint2 shows no errors.

    NOTE: If something is not working right, add "rundebug = true;" at the beginning of the script for a detailed debug log.

    //[AWG] Wyatt's score management script
    /*
    This script saves players scores every 2 minutes.  When players reconnect to the game, their score is recovered.
    */
    
    //Create the array if it does not already exist.
    
    private ["_id","_present","_s","_debugcount"];
    if (isnil "PlayerScores") then {PlayerScores = []; if (rundebug) then {diag_log text format["scoresave.sqf - PlayerScores array created."];};};
    
    _present = false; //Declare variable false
    _id = getPlayerUID (vehicle player);  //Get player ID and add to variable
    
    
    //Lets check and see if the player is currently in our array!  If he is in our array, we will give him his score back.
    {
        if ( (_x select 0) == (_id) ) exitWith
        {
           _present = true; //If the _id is found in the array, then set the _present var to true!
    	player addScore (_x select 1);
    	if (rundebug) then {diag_log text format["scoresave.sqf - %1 score has been recovered with ID %2", player, _x];};
    	Hint "Welcome back! \nYour score has been recovered.";
    	sleep 2;
    	Hint "";
        };
    } foreach PlayerScores;
    
    
    //If the player is not in the array, add him to the array then broadcast!
    if (!_present) then
    {
        PlayerScores = PlayerScores + [ [_id, score player] ];
        publicVariable "PlayerScores";
     if (rundebug) then {diag_log text format["scoresave.sqf - New player, %1, has been added to the score save array with ID %2 and has been pushed public.", player, _id];};
    };
    
    
    //Score save loop!
    for [{_s=0},{_s<1},{_s=_s}] do
    {
       sleep 100+(random 40); //Wait approx. 2 mins +/- 20 seconds
        {
             if ( (_x select 0) == (_id) ) exitWith
             {
                  _x set [1, score player]; //Put the player's current score in the array
    		   if (rundebug) then {diag_log text format["scoresave.sqf - %1 score has been UPDATED with ID %2 and score %3", player, _x, score player];};
             };
        } foreach PlayerScores;
        publicVariable "PlayerScores";
    if (rundebug) then {
    if (isnil "_debugcount") then {_debugcount = 0};
    _debugcount = _debugcount + 1;
    diag_log text format["scoresave.sqf - Infinite loop in script has reached its goal.  Loop has reached a count of %1", _debugcount];};
    };
    if (rundebug) then {diag_log text format["scoresave.sqf - DANGER! The script should have not made it here due to the infinite loop.  This is the end of the script."];};
    

×