Jump to content
Sign in to follow this  
adogmc

script multi impacts....

Recommended Posts

I am looking for a script for my multi impacts remington870 Tac12 and that of my Spas12 OFP that no longer works ...

Sincerely GMC

ado_remington870TAc-1.jpgado_spas12%20-%201.jpg

Share this post


Link to post
Share on other sites

Thank you, I vote.

If it can move the thing ...

Share this post


Link to post
Share on other sites
You could try using createVehicle but you won't get very satisfying results.

Why not?

This sure works. It's even fired with a Gaussian distribution (I haven't done any statistical tests, but it should be a Gaussian...). It probably creates impossible lag online, but It's smooth as can be offline. Buckshot should work perfectly. There are only two problems. First is the lack of owner. Kills won't "belong" to whoever fired the gun unless you get impossibly lucky. Less than one out of 1150 chance.

The second problem is that it only works with the "shotBullet" simulation type. It doesn't work (yet) with "shotShell", since they all explode inside the barrel as soon as they're created. This isn't a problem for a shotgun, but it's annoying me because bullets come out of the coax position on a tank.

For now, here's how I'm doing it. This is heavily modified to strip out all the extraneous fire control handling in my mod and my attempts to make shells work (spawning them in a randomly filled ball...), so it might be a bit buggy.

This bit sets up lookup tables for the Ziggurat method of Gaussian distributions. It belongs in an init script, so it doesn't get called each time:

<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">

// Generates normally distributed random numbers with the Ziggurat method

// normalized to sigma.

// Adapted from gauss.c by Jochen Voss, at http://seehuhn.de/pages/ziggurat

NWD_PARAM_R = 3.44428647676;

/* tabulated values for the height of the Ziggurat levels */

NWD_YTAB = [

1, 0.963598623011, 0.936280813353, 0.913041104253,

0.892278506696, 0.873239356919, 0.855496407634, 0.838778928349,

0.822902083699, 0.807732738234, 0.793171045519, 0.779139726505,

0.765577436082, 0.752434456248, 0.739669787677, 0.727249120285,

0.715143377413, 0.703327646455, 0.691780377035, 0.68048276891,

0.669418297233, 0.65857233912, 0.647931876189, 0.637485254896,

0.62722199145, 0.617132611532, 0.607208517467, 0.597441877296,

0.587825531465, 0.578352913803, 0.569017984198, 0.559815170911,

0.550739320877, 0.541785656682, 0.532949739145, 0.524227434628,

0.515614886373, 0.507108489253, 0.498704867478, 0.490400854812,

0.482193476986, 0.47407993601, 0.466057596125, 0.458123971214,

0.450276713467, 0.442513603171, 0.434832539473, 0.427231532022,

0.419708693379, 0.41226223212, 0.404890446548, 0.397591718955,

0.390364510382, 0.383207355816, 0.376118859788, 0.369097692334,

0.362142585282, 0.355252328834, 0.348425768415, 0.341661801776,

0.334959376311, 0.328317486588, 0.321735172063, 0.31521151497,

0.308745638367, 0.302336704338, 0.29598391232, 0.289686497571,

0.283443729739, 0.27725491156, 0.271119377649, 0.265036493387,

0.259005653912, 0.253026283183, 0.247097833139, 0.241219782932,

0.235391638239, 0.229612930649, 0.223883217122, 0.218202079518,

0.212569124201, 0.206983981709, 0.201446306496, 0.195955776745,

0.190512094256, 0.185114984406, 0.179764196185, 0.174459502324,

0.169200699492, 0.1639876086, 0.158820075195, 0.153697969964,

0.148621189348, 0.143589656295, 0.138603321143, 0.133662162669,

0.128766189309, 0.123915440582, 0.119109988745, 0.114349940703,

0.10963544023, 0.104966670533, 0.100343857232, 0.0957672718266,

0.0912372357329, 0.0867541250127, 0.082318375932, 0.0779304915295,

0.0735910494266, 0.0693007111742, 0.065060233529, 0.0608704821745,

0.056732448584, 0.05264727098, 0.0486162607163, 0.0446409359769,

0.0407230655415, 0.0368647267386, 0.0330683839378, 0.0293369977411,

0.0256741818288, 0.0220844372634, 0.0185735200577, 0.0151490552854,

0.0118216532614, 0.00860719483079, 0.00553245272614, 0.00265435214565

];

/* tabulated values for 2^24 times x/x[i+1],

* used to accept for U*x[i+1]<=x without any floating point operations */

NWD_KTAB = [

0, 12590644, 14272653, 14988939,

15384584, 15635009, 15807561, 15933577,

16029594, 16105155, 16166147, 16216399,

16258508, 16294295, 16325078, 16351831,

16375291, 16396026, 16414479, 16431002,

16445880, 16459343, 16471578, 16482744,

16492970, 16502368, 16511031, 16519039,

16526459, 16533352, 16539769, 16545755,

16551348, 16556584, 16561493, 16566101,

16570433, 16574511, 16578353, 16581977,

16585398, 16588629, 16591685, 16594575,

16597311, 16599901, 16602354, 16604679,

16606881, 16608968, 16610945, 16612818,

16614592, 16616272, 16617861, 16619363,

16620782, 16622121, 16623383, 16624570,

16625685, 16626730, 16627708, 16628619,

16629465, 16630248, 16630969, 16631628,

16632228, 16632768, 16633248, 16633671,

16634034, 16634340, 16634586, 16634774,

16634903, 16634972, 16634980, 16634926,

16634810, 16634628, 16634381, 16634066,

16633680, 16633222, 16632688, 16632075,

16631380, 16630598, 16629726, 16628757,

16627686, 16626507, 16625212, 16623794,

16622243, 16620548, 16618698, 16616679,

16614476, 16612071, 16609444, 16606571,

16603425, 16599973, 16596178, 16591995,

16587369, 16582237, 16576520, 16570120,

16562917, 16554758, 16545450, 16534739,

16522287, 16507638, 16490152, 16468907,

16442518, 16408804, 16364095, 16301683,

16207738, 16047994, 15704248, 15472926

];

/* tabulated values of 2^{-24}*x */

NWD_WTAB = [

1.62318314817e-08, 2.16291505214e-08, 2.54246305087e-08, 2.84579525938e-08,

3.10340022482e-08, 3.33011726243e-08, 3.53439060345e-08, 3.72152672658e-08,

3.8950989572e-08, 4.05763964764e-08, 4.21101548915e-08, 4.35664624904e-08,

4.49563968336e-08, 4.62887864029e-08, 4.75707945735e-08, 4.88083237257e-08,

5.00063025384e-08, 5.11688950428e-08, 5.22996558616e-08, 5.34016475624e-08,

5.44775307871e-08, 5.55296344581e-08, 5.65600111659e-08, 5.75704813695e-08,

5.85626690412e-08, 5.95380306862e-08, 6.04978791776e-08, 6.14434034901e-08,

6.23756851626e-08, 6.32957121259e-08, 6.42043903937e-08, 6.51025540077e-08,

6.59909735447e-08, 6.68703634341e-08, 6.77413882848e-08, 6.8604668381e-08,

6.94607844804e-08, 7.03102820203e-08, 7.11536748229e-08, 7.1991448372e-08,

7.2824062723e-08, 7.36519550992e-08, 7.44755422158e-08, 7.52952223703e-08,

7.61113773308e-08, 7.69243740467e-08, 7.77345662086e-08, 7.85422956743e-08,

7.93478937793e-08, 8.01516825471e-08, 8.09539758128e-08, 8.17550802699e-08,

8.25552964535e-08, 8.33549196661e-08, 8.41542408569e-08, 8.49535474601e-08,

8.57531242006e-08, 8.65532538723e-08, 8.73542180955e-08, 8.8156298059e-08,

8.89597752521e-08, 8.97649321908e-08, 9.05720531451e-08, 9.138142487e-08,

9.21933373471e-08, 9.30080845407e-08, 9.38259651738e-08, 9.46472835298e-08,

9.54723502847e-08, 9.63014833769e-08, 9.71350089201e-08, 9.79732621669e-08,

9.88165885297e-08, 9.96653446693e-08, 1.00519899658e-07, 1.0138063623e-07,

1.02247952126e-07, 1.03122261554e-07, 1.04003996769e-07, 1.04893609795e-07,

1.05791574313e-07, 1.06698387725e-07, 1.07614573423e-07, 1.08540683296e-07,

1.09477300508e-07, 1.1042504257e-07, 1.11384564771e-07, 1.12356564007e-07,

1.13341783071e-07, 1.14341015475e-07, 1.15355110887e-07, 1.16384981291e-07,

1.17431607977e-07, 1.18496049514e-07, 1.19579450872e-07, 1.20683053909e-07,

1.21808209468e-07, 1.2295639141e-07, 1.24129212952e-07, 1.25328445797e-07,

1.26556042658e-07, 1.27814163916e-07, 1.29105209375e-07, 1.30431856341e-07,

1.31797105598e-07, 1.3320433736e-07, 1.34657379914e-07, 1.36160594606e-07,

1.37718982103e-07, 1.39338316679e-07, 1.41025317971e-07, 1.42787873535e-07,

1.44635331499e-07, 1.4657889173e-07, 1.48632138436e-07, 1.50811780719e-07,

1.53138707402e-07, 1.55639532047e-07, 1.58348931426e-07, 1.61313325908e-07,

1.64596952856e-07, 1.68292495203e-07, 1.72541128694e-07, 1.77574279496e-07,

1.83813550477e-07, 1.92166040885e-07, 2.05295471952e-07, 2.22600839893e-07

];

This belongs in an "onFired" script:

<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">

_player = _this select 0;

_pvehicle = vehicle _player;

_weapon = _this select 1;

_ammo = _this select 4;

_bullet = nearestObject [_pvehicle, _ammo];

_pos = position _bullet;

_dir = _pvehicle weaponDirection _weapon;

_dirx = _dir select 0;

_diry = _dir select 1;

_dirz = _dir select 2;

_dirang = [_dirx atan2 _diry, sqrt(_diry*_diry + _dirx*_dirx) atan2 (-_dirz)];

// dispersion is 68% circle in mils

_dispersion = getNumber (configFile >> "CfgAmmo" >> _ammo >> "NWD_dispersion");

_pelletcount = getNumber (configFile >> "cfgAmmo" >> _ammo >> "NWD_pelletcount");

for [{_pelletcounter=2},{_pelletcounter<=_pelletcount},{_pelletcounter=_pelletcounter+1}] do

{

_pellet = _ammo createVehicle _pos;

// Gaussian distribution

_x = 0;

_sign = 0;

while {true} do

{

_j = floor (random 16777216); // surely there's a better way to get a 24 bit random integer?

_i = floor (random 128);

_sign = floor (random 2);

_x = _j * (NWD_WTAB select _i);

_y = 0;

if (_j < (NWD_KTAB select _i)) exitWith {};

if (_i<127) then

{

_y0 = NWD_YTAB select _i;

_y1 = NWD_YTAB select (_i+1);

_y = _y1+(_y0-_y1)*(random 1);

}

else

{

_x = NWD_PARAM_R - ln(1.0-(random 1))/NWD_PARAM_R;

_y = exp(-NWD_PARAM_R*(x-0.5*NWD_PARAM_R))*(random 1);

};

if (_y < exp(-0.5*_x*_x)) exitWith {};

};

if (_sign == 1) then { _x = -_x };

_radiusdisp = _x*_dispersion/2;

_angledisp = random 360;

_azimuth = (_dirang select 0) + ( _radiusdisp * cos(_angledisp) ) / 1000*180/pi;

_elevation = (_dirang select 1) + ( _radiusdisp * sin(_angledisp) ) / 1000*180/pi;

_dir = [sin(_elevation) * sin(_azimuth), sin(_elevation) * cos(_azimuth), - cos(_elevation)];

_vel = [(_dir select 0) * _speed, (_dir select 1) * _speed, (_dir select 2) * _speed];

_pellet setVelocity _vel;

_pellet setVectorDir _dir;

};

This requires two defines in CfgAmmo/yourammotype.

The first is "NWD_dispersion = x;". This is the one-sigma dispersion in mils. If you drew a 68% circle around the spread, this would be it's total angle with your firing location. It's more or less equivalent to the "dispersion" variable in CfgWeapons multiplied by 1000, except that it can be set per ammo type. "NWD_dispersion = 2" will probably give you more extreme spread than "dispersion = 0.002", though, because mine's a Gaussian distribution and I don't think the default dispersion is. The first pellet with this code will get it's spread from "dispersion", all others will get their spread from "NWD_dispersion".

The second is "NWD_pelletcount = x;". This is the total number of pellets, including the one fired by ArmA. If you have 9-pellet 00-Buck, set it to 9.

Share this post


Link to post
Share on other sites

ADOGMC you're not new here so there should be no excuse for ignoring the forum rules, please don't hotlink images >100kb smile_o.gif

Share this post


Link to post
Share on other sites
...

Problem is that you don't get credit for the kill, the game doesn't recognize that those rounds are being fired from a unit. The game just treats it as an accidental death like being run over by a car.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×