Home   Help Search Login Register  

Author Topic: help with zone  (Read 2740 times)

0 Members and 1 Guest are viewing this topic.

Offline Grimfist

  • Members
  • *
    • Armaholic
help with zone
« on: 26 Oct 2009, 12:28:46 »
in the mp mission 'detector' (one that comes with the game)
there is a script and when you leave the area the screen goes fuzzy, and if you keep going you die.
i am trying to put it in my mission, but cannot get it working.

Here is the different files:
Code: [Select]
onLoadMission="$STR_detector_subtitle";

respawn = 3;
respawnDelay = 3;
aikills = 1;

class Header
{
gameType = DM;
minPlayers = 1;
maxPlayers = 20;
};

titleParam1 = "$STR_mp_param_duration";
valuesParam1[] = {600,1200,1800,3000,-1};
defValueParam1 = 600;
textsParam1[] = {"10","20","30","60","$STR_mp_param_infinite"};

titleParam2 = "$STR_mp_param_score";
valuesParam2[] = {10,20,50,100,100000000000000000};
defValueParam2 = 100000000000000000;
textsParam2[] = {"10","20","50","100","$STR_mp_param_infinite"};

#define IDENTITY(N,NAME) class ap_##N \
   { \
name = ##NAME##; \
face = "Default"; \
glasses = "none"; \
speaker = "Male02EN"; \
pitch = 1.0; \
   };

class CfgIdentities
{
IDENTITY(0,"01:H7#5G6")
IDENTITY(1,"02:S63PFJ")
IDENTITY(2,"03:E183FV")
IDENTITY(3,"04:OUL4DQ")
IDENTITY(4,"05:JP61KY")
IDENTITY(5,"06:MT6H17")
IDENTITY(6,"07:DNH71O")
IDENTITY(7,"08:U-EXMX")
IDENTITY(8,"09:XZME6X")
IDENTITY(9,"10:SJQZVE")
IDENTITY(10,"11:N9CG-4")
IDENTITY(11,"12:FBTVLZ")
IDENTITY(12,"13:40UXD3")
IDENTITY(13,"14:U834RW")
IDENTITY(14,"15:QKGHTR")
IDENTITY(15,"16:4NGEBV")
IDENTITY(16,"17:7S6HJR")
IDENTITY(17,"18:90I472")
IDENTITY(18,"19:O0BDK5")
IDENTITY(19,"20:EC70ZW")
};

Code: [Select]
/*
File: init.sqf
Author: Karel Moricky
*/


_diary = player createDiaryRecord ["Diary", [localize "str_detector_briefing", localize "str_detector_briefing_text"]];
end_score = false;
if !(isserver) exitwith {};

//////////////////////////////////////////////////
startLoadingScreen [localize "str_detector_onload","RscDisplayLoadMission"];
//////////////////////////////////////////////////

//--- Cursom params
if (isnil "param1") then {param1 = -1};
if (param1 > 0) then {estimatedtimeleft param1;};

waituntil {!isnil "bis_fnc_init"};
//[nil,nil,"per",rEXECVM,"init_local.sqf"] call RE;
//player execvm "init_local.sqf";

//--- Zone trigger
_trig = zone;
_trigpos = position _trig;
_trigsize = (triggerarea _trig) select 0;
_trigsizedev = _trigsize / 10;

_carcount = _trigsize / 4;
_progresscountMax = _carcount + _trigsize + 360;
_progresscount = 0;
progressLoadingScreen _progresscount;


//--- Create cars
_wrecks = ["HMMWVWreck","BMP2Wreck","UralWreck","datsun01Wreck","datsun02Wreck","hiluxWreck","Mi8Wreck","T72Wreck","T72WreckTurret","BRDMWreck","UAZWreck","SKODAWreck","LADAWreck"];
_cars = ["Tractor","HMMWV_M2","HMMWV_TOW","HMMWV_MK19","HMMWV","UAZ_MG_CDF","UAZ_AGS30_CDF","UAZ_CDF","Ural_CDF","UralOpen_CDF","UralRepair_CDF","UralReammo_CDF","UralRefuel_CDF","Ural_ZU23_CDF","BRDM2_CDF","BRDM2_ATGM_CDF","GRAD_CDF","UAZ_RU","UAZ_AGS30_RU","GRAD_RU","UAZ_MG_INS","UAZ_AGS30_INS","UAZ_INS","UAZ_SPG9_INS","Ural_INS","UralOpen_INS","UralRepair_INS","UralReammo_INS","UralRefuel_INS","Ural_ZU23_INS","BRDM2_INS","BRDM2_ATGM_INS","GRAD_INS","BRDM2_Gue","BRDM2_HQ_Gue","Ural_ZU23_Gue","UralCivil","UralCivil2","Skoda","SkodaBlue","SkodaRed","SkodaGreen","datsun1_civil_1_open","datsun1_civil_2_covered","datsun1_civil_3_open","car_hatchback","car_sedan","hilux1_civil_1_open","hilux1_civil_2_covered","hilux1_civil_3_open","Pickup_PK_GUE","Pickup_PK_INS","Offroad_DSHKM_Gue","Offroad_SPG9_Gue","Offroad_DSHKM_INS","BTR90","BTR90_HQ","GAZ_Vodnik_HMG","GAZ_Vodnik","GAZ_Vodnik_MedEvac","HMMWV_Armored","HMMWV_Ambulance","HMMWV_Avenger","Ikarus","Kamaz","KamazOpen","KamazRepair","KamazReammo","KamazRefuel","Lada_base","Lada1","Lada2","LadaLM","LAV25","LAV25_HQ","MTVR","MtvrReammo","MtvrRefuel","MtvrRepair","TowingTractor","V3S_Civ","V3S_Gue","VWGolf","WarfareSalvageTruck_USMC","WarfareSupplyTruck_USMC","WarfareReammoTruck_USMC","WarfareSalvageTruck_RU","WarfareSupplyTruck_RU","WarfareReammoTruck_RU","WarfareSalvageTruck_CDF","WarfareSupplyTruck_CDF","WarfareReammoTruck_CDF","WarfareSalvageTruck_INS","WarfareSupplyTruck_INS","WarfareReammoTruck_INS","WarfareSalvageTruck_Gue","WarfareSupplyTruck_Gue","WarfareReammoTruck_Gue"];
_cars = _cars + _wrecks;


for "_i" from 0 to _carcount do {
_class = _cars call bis_fnc_selectrandom;
_car = createvehicle [_class, position _trig, [], _trigsize*0.8, "none"];
_car setdir (random 360);
_car setpos [position _car select 0,position _car select 1,0];
_car setdamage (random 0.8);
_car setfuel (random 1);
_car setammocargo (random 1);

_progresscount = _progresscount + (_i / _progresscountMax);
progressLoadingScreen _progresscount;
if (cheat1) then {
_marker = createmarker [format ["www%1",round _i],position _car];
_marker setmarkertype "mil_triangle";
_marker setmarkerdir direction _car;
_marker setmarkercolor "colorblue";
};
};

//--- Create ammo boxes
_allammolist = ["USMC_Soldier","USMC_Soldier_Light","USMC_Soldier2","USMC_Soldier_GL","USMC_Soldier_Officer","USMC_Soldier_SL","USMC_Soldier_TL","USMC_Soldier_LAT","USMC_Soldier_AT","USMC_Soldier_HAT","USMC_Soldier_AA","USMC_Soldier_Medic","USMC_Soldier_AR","USMC_Soldier_MG","USMC_SoldierS_Spotter","USMC_SoldierS_Sniper","USMC_SoldierS_SniperH","USMC_SoldierM_Marksman","USMC_SoldierS","USMC_SoldierS_Engineer","USMC_Soldier_Pilot","USMC_Soldier_Crew","USMC_LHD_Crew_Base","USMC_LHD_Crew_White","USMC_LHD_Crew_Blue","USMC_LHD_Crew_Brown","USMC_LHD_Crew_Green","USMC_LHD_Crew_Red","USMC_LHD_Crew_Purple","USMC_LHD_Crew_Yellow","FR_TL","FR_Commander","FR_R","FR_Marksman","FR_Light","FR_Corpsman","FR_AR","FR_GL","FR_Sapper","FR_AC","FR_Miles","FR_Cooper","FR_Sykes","FR_OHara","FR_Rodriguez","FR_Assault_R","FR_Assault_GL","RU_Soldier","RU_Soldier2","RU_Soldier_Officer","RU_Soldier_Light","RU_Soldier_MG","RU_Soldier_AR","RU_Soldier_GL","RU_Soldier_Marksman","RU_Soldier_LAT","RU_Soldier_AT","RU_Soldier_HAT","RU_Soldier_AA","RU_Soldier_Sniper","RU_Soldier_SniperH","RU_Soldier_Spotter","RU_Soldier_Medic","RU_Soldier_Pilot","RU_Soldier_Crew","RU_Soldier_SL","RU_Soldier_TL","RU_Commander","RUS_Soldier1","RUS_Soldier2","RUS_Soldier3","RUS_Soldier_GL","RUS_Soldier_TL","RUS_Commander","RUS_Soldier_Marksman","RUS_Soldier_Sab","MVD_Soldier","MVD_Soldier_GL","MVD_Soldier_TL","MVD_Soldier_AT","MVD_Soldier_MG","MVD_Soldier_Marksman","MVD_Soldier_Sniper","GUE_Soldier_1","GUE_Soldier_2","GUE_Soldier_3","GUE_Soldier_GL","GUE_Worker2","GUE_Woodlander1","GUE_Woodlander2","GUE_Woodlander3","GUE_Villager3","GUE_Villager4","GUE_Soldier_CO","GUE_Commander","GUE_Soldier_AT","GUE_Soldier_AA","GUE_Soldier_AR","GUE_Soldier_MG","GUE_Soldier_Sniper","GUE_Soldier_Sab","GUE_Soldier_Scout","GUE_Soldier_Medic","GUE_Soldier_Pilot","GUE_Soldier_Crew","Ins_Soldier_1","Ins_Soldier_2","Ins_Soldier_CO","Ins_Soldier_GL","Ins_Soldier_Medic","Ins_Soldier_AR","Ins_Soldier_MG","Ins_Soldier_AT","Ins_Soldier_AA","Ins_Soldier_Sniper","Ins_Soldier_Sapper","Ins_Soldier_Sab","Ins_Worker2","Ins_Woodlander1","Ins_Woodlander2","Ins_Woodlander3","Ins_Villager3","Ins_Villager4","Ins_Commander","Ins_Lopotev","Ins_Bardak","Ins_Soldier_Pilot","Ins_Soldier_Crew","CDF_Soldier","CDF_Soldier_Light","CDF_Soldier_GL","CDF_Soldier_Medic","CDF_Soldier_Sniper","CDF_Soldier_RPG","CDF_Soldier_Strela","CDF_Soldier_AR","CDF_Soldier_MG","CDF_Soldier_TL","CDF_Soldier_Officer","CDF_Soldier_Militia","CDF_Soldier_Pilot","CDF_Soldier_Crew","CDF_Soldier_Spotter","CDF_Soldier_Marksman","CDF_Soldier_Engineer","CDF_Commander"];
_ammolist = [];

// Select random 20 of them (to prevent loading many different models)
for "_i" from 1 to 20 do {
_class = _allammolist call bis_fnc_selectrandom;
_ammolist = _ammolist + [_class]
};


for "_i" from 0 to _trigsize do {
_class = _ammolist call bis_fnc_selectrandom;
_ammo = createvehicle [_class, position _trig, [], _trigsize*0.8, "none"];
_ammo setdamage 1;
_ammo setdir (random 360);

_progresscount = _progresscount + (_i / _progresscountMax);
progressLoadingScreen _progresscount;
if (cheat1) then {
_marker = createmarker [format ["aaa%1",round _i],position _ammo];
_marker setmarkertype "mil_triangle";
_marker setmarkerdir direction _ammo;
_marker setmarkercolor "colorred";
};
};

//--- Create border (only for circle)
_classlist = ["Citizen1","Citizen2","Citizen3","Citizen4","Worker1","Worker2","Worker3","Worker4","Profiteer1","Profiteer2","Profiteer3","Profiteer4","Rocker1","Rocker2","Rocker3","Rocker4","Woodlander1","Woodlander2","Woodlander3","Woodlander4","Functionary1","Functionary2","Villager1","Villager2","Villager3","Villager4","Priest","Doctor","SchoolTeacher","Assistant","Pilot","Policeman"/*,"Secretary1","Secretary2","Secretary3","Secretary4","Secretary5","Sportswoman1","Sportswoman2","Sportswoman3","Sportswoman4","Sportswoman5","ValentinaFit","ValentinaVictim","Madam1","Madam2","Madam3","Madam4","Madam5","Farmwife1","Farmwife2","Farmwife3","Farmwife4","Farmwife5","Damsel1","Damsel2","Damsel3","Damsel4","Damsel5","HouseWife1","HouseWife2","HouseWife3","HouseWife4","HouseWife5","Hooker1","Hooker2","Hooker3","Hooker4","Hooker5","WorkWoman1","WorkWoman2","WorkWoman3","WorkWoman4","WorkWoman5"*/];
_bodydis = (360 / (_trigsize * pi)) * 3;
_bodycount = ((_trigsize) * pi) / _bodydis;
for "_dir" from 0 to 360 step _bodydis do {
_class = _classlist call bis_fnc_selectrandom;
_dis = _trigsize + (-_trigsizedev/2 + random _trigsizedev);
_pos = [(_trigpos select 0) + (sin _dir * _dis),(_trigpos select 1) + (cos _dir * _dis),0];
_body = _class createvehicle _pos;
_body setpos _pos;
_body setdir (random 360);
_body switchmove "";
_body setdamage 1;

_progresscount = _progresscount + (_dir / _progresscountMax);
progressLoadingScreen _progresscount;
if (cheat1) then {
_marker = createmarker [format ["xxx%1",round _dir],_pos];
_marker setmarkertype "mil_dot";
_marker setmarkercolor "colororange";
};
};

//--- Move NPCs
{
//if (!isplayer _x) then {_x setpos [100,100,100]};
_x setpos [(_trigpos select 0) + (cos (random 360) * random (_trigsize)),(_trigpos select 1) + (sin (random 360) * random (_trigsize)),0];
if !(isplayer _x) then {
_x execvm "init_respawn.sqf";
_x addeventhandler ["killed",{(_this select 0) execvm "init_respawn.sqf"}];
_x setidentity (vehiclevarname _x);
_x setskill random 0.5;
};
} foreach allunits;
//[ap_0,ap_1,ap_2,ap_3,ap_4,ap_5,ap_6,ap_7,ap_8,ap_9,ap_10,ap_11,ap_12,ap_13,ap_14,ap_15,ap_16,ap_17,ap_18,ap_19];

//////////////////////////////////////////////////
endLoadingScreen;
//////////////////////////////////////////////////

//sleep 0.01;



waituntil {
_players = [] call bis_fnc_listplayers;
_score = 0;
{_score = _score max (score _x)} foreach _players;
_score >= param2
};
end_score = true;

Code: [Select]
/*
File: init_respawn.sqf
Author: Karel Moricky
*/

sleep 0.01;

_var = vehiclevarname _this;
_newunit = objnull;
waituntil {
call compile format ["_newunit = %1",_var];
alive _newunit;
};
_newunit addrating -10e10;
_newunit switchmove "";

if (_newunit == player && _newunit == _this) then {cuttext ["","black in",10000]};
waituntil {!isnil "bis_fnc_init"};
if (_newunit == player) then {cuttext ["","white in",1]};

_newunit addrating -10e10;
removeallweapons _newunit;
for "_i" from 1 to 12 do {_newunit addmagazine "30Rnd_556x45_StanagSD"};
_newunit addweapon "G36_C_SD_eotech";
_newunit addweapon "nvgoggles";
_newunit selectweapon "G36_C_SD_eotech";
_newunit switchmove "";

if (count waypoints _newunit == 1) then {
_wp = group _newunit addwaypoint [position _newunit,0];
_wp setwaypointtype "sad";
_wp setwaypointbehaviour "combat";
};

Code: [Select]
//onmapsingleclick "player setpos _pos";
//setTerrainGrid 1000;
//---

_trig = zone;
_trigsize = ((triggerarea _trig) select 0);
_trigzonesize = 20;
if (isnil "truetime") then {truetime = time;};

//--- Respawn codes
player setpos [(position _trig select 0) + (sin (random 360) * (random (_trigsize * 0.8))),(position _trig select 1) + (sin (random 360) * (random (_trigsize * 0.8))),0];
player execvm "init_respawn.sqf";
player addeventhandler ["killed",{(_this select 0) execvm "init_respawn.sqf"}];

mapanimadd [0,0.1,position player];
mapAnimCommit;

//enable GPS in mission
showGPS true;

//--- Ambient Light
_lightColor = [1,1,1];
_light = "#lightpoint" createVehicleLocal position player;
_light setLightBrightness 0.1;
_light setLightAmbient _lightColor;
_light setLightColor _lightColor;
_light lightAttachObject [vehicle player, [0,0,-20]];
xlight = _light;

//--- Post process effects
sleep 0.01;
"colorCorrections" ppEffectAdjust [1, 1, -0.005, [0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 1.0, 0.4], [0.3, 0.3, 0.3, 0.0]];
"colorCorrections" ppEffectCommit 0;
"colorCorrections" ppEffectEnable true;

//player setvehicleposition [position _trig,[],_trigsize];
//player setpos [(position _trig select 0) + (sin 360 * _trigsize),(position _trig select 1) + (sin 360 * _trigsize),0];

while {true} do {
waituntil {alive player};
if (isserver) then {
truetime = time;
publicvariable "truetime";
};

//--- Environment
//skiptime (-daytime + (-0.001 + random 0.002));
0 setovercast 0.7;
0 setfog 1;
0 setrain 0;
//if (random 1 > 0.5) then {_light setLightBrightness (0.28 + random 0.04)};
_light lightAttachObject [vehicle player, [0,0,-20]];

//--- Detectorâ„¢
_unitlist = [];
//_possibleUnits = position player nearentities ["man",500];
_possibleUnits = allunits;// [] call bis_fnc_listplayers;
_timeleft = if (param1 > 0) then {parsetext format ["<t align='center'>%1</t>",[(param1 - truetime)/60,"HH:MM"] call bis_fnc_timetostring]} else {""};
if ({alive _x} count _possibleUnits > 1) then {

//--- Show name and distance
for "_n" from 0 to (count _possibleUnits)-1 do {
_actual = _possibleUnits select _n;
if (alive _actual && _actual != player) then {
_unitlist = _unitlist + [_actual];
};
};
_nearestunit = objnull;
_dist = 1000000;
{
if (_x distance player < _dist) then {_nearestunit = _x; _dist = _x distance player};
} foreach _unitlist;
_name = parsetext format ["<t size='1.1' align='center'>%1</t>",name _nearestunit];

//--- Sort by danger
_dist1 = round (((player distance _nearestunit)/10))*10;
_color = if (_dist1 > 50) then {"#d6ff8c"} else {if (_dist1 > 20) then {"#ff9900"} else {"#ff0000"}};

_enemy1 = parsetext format ["<t size='2.0' align='center' color='%2'>%1 m</t>",_dist1,_color];
_text = if (param1 > 0) then {[_enemy1,linebreak,_name,linebreak,_timeleft]} else {[_enemy1,linebreak,_name]};
hintsilent composeText _text;
} else {

//--- Null
_name = parsetext "<t size='1.1' align='center'>???</t>";
_enemy1 = parsetext "<t size='2.0' align='center' color='#d6ff8c'>??? m</t>";
_text = if (param1 > 0) then {[_enemy1,linebreak,_name,linebreak,_timeleft]} else {[_enemy1,linebreak,_name]};
hintsilent composeText _text;
};

//--- Zone
_zonedis = player distance _trig;
if (_zonedis > _trigsize) then {
_alpha = ((_zonedis - _trigsize) / _trigzonesize);
"filmGrain" ppEffectEnable true;
"filmGrain" ppEffectAdjust [_alpha, 0, 1, _alpha/100, 1];
"filmGrain" ppEffectCommit 0;
if (_zonedis > (_trigsize + _trigzonesize)) then {
player setdamage 1;
player addscore -1;
};
} else {
"filmGrain" ppEffectEnable false;
};

sleep 0.1;
};

i have a trigger called zone that is 1500 x 450.
and the functions module is there also. (im not sure if i need it)

What do i need to take out and change?

i know this is a pretty big question but i have tried and cant do it.
TIA, grim.
« Last Edit: 26 Oct 2009, 12:30:17 by Grimfist »

Offline tcp

  • Members
  • *
    • Violator Gaming
Re: help with zone
« Reply #1 on: 26 Oct 2009, 20:01:35 »
This is the relevant code:
Code: (initjipcompatible.sqf) [Select]
_trig = zone;
_trigsize = (triggerarea _trig) select 0;
_trigzonesize = 20;
while {true} do {
//--- Zone
_zonedis = player distance _trig;
if (_zonedis > _trigsize) then {
_alpha = ((_zonedis - _trigsize) / _trigzonesize);
"filmGrain" ppEffectEnable true;
"filmGrain" ppEffectAdjust [_alpha, 0, 1, _alpha/100, 1];
"filmGrain" ppEffectCommit 0;
if (_zonedis > (_trigsize + _trigzonesize)) then {
player setdamage 1;
player addscore -1;
};
} else {
"filmGrain" ppEffectEnable false;
};
sleep 0.1;
};

May need to be tweaked for performance since you won't always be out of bounds.

For Example:
Trigger encompasses playing field, can be either rectangle or ellipse.
Name: zone
Activation: BLUFOR Present, repeatable
Cond:
!((vehicle player) in thislist)
Act:
_oob = player execVM "oob.sqf";

Code: (oob.sqf) [Select]
private ["_trig", "_trigsize", "_trigzonesize", "_oob", "_zonedis", "_alpha"];
_trig = zone;
_trigsize = (triggerarea _trig) select 0;
_trigzonesize = 20;
_oob = true;
while {_oob} do {
_zonedis = player distance _trig;
if (_zonedis > _trigsize) then {
_alpha = ((_zonedis - _trigsize) / _trigzonesize);
"filmGrain" ppEffectEnable true;
"filmGrain" ppEffectAdjust [_alpha, 0, 1, _alpha/100, 1];
"filmGrain" ppEffectCommit 0;
if (_zonedis > (_trigsize + _trigzonesize)) then {
player setdamage 1;
player addscore -1;
};
} else {
"filmGrain" ppEffectEnable false;
_oob = false;
};
sleep 0.1;
};
« Last Edit: 29 Oct 2009, 19:14:48 by tcp »

Offline Grimfist

  • Members
  • *
    • Armaholic
Re: help with zone
« Reply #2 on: 27 Oct 2009, 08:56:36 »
ty

but, i put that in exactly, but it didnt work.

edit:

do i have to define there anywhere?
Code: [Select]
private ["_trig", "_zonedis", "_trigsize", "_alpha", "_trigzonesize"];
« Last Edit: 27 Oct 2009, 09:03:48 by Grimfist »

Offline tcp

  • Members
  • *
    • Violator Gaming
Re: help with zone
« Reply #3 on: 28 Oct 2009, 22:34:44 »
I forgot to initialize:
_trigsize = (triggerarea _trig) select 0;
_trigzonesize = 20;
Put those after the line:
_trig = zone;

I think 20 is distance outside the trigger that you can move before being killed. The effects will adjust to span that distance as well.

The private statement is not required but always recommended to keep everything contained within one scope when working with multiple functions.
« Last Edit: 28 Oct 2009, 22:45:47 by tcp »

Offline Grimfist

  • Members
  • *
    • Armaholic
Re: help with zone
« Reply #4 on: 29 Oct 2009, 09:49:20 »
ahh cool, ty tcp
trying that now.

didnt work :(
i added that extra stuff to my init file, is that right?
« Last Edit: 29 Oct 2009, 09:56:13 by Grimfist »

Offline tcp

  • Members
  • *
    • Violator Gaming
Re: help with zone
« Reply #5 on: 29 Oct 2009, 19:18:30 »
No, add it to the script, nothing goes into the init line nor init.sqf.
Corrected the script above, also make trigger BLUFOR Present, repeatable
Or Anybody, if you want boundaries for both teams.
Tested it, and it works. Although 20 is kind of short before it kills you.
You probably want create a marker that shows the boundary area as well.

Offline Grimfist

  • Members
  • *
    • Armaholic
Re: help with zone
« Reply #6 on: 30 Oct 2009, 18:29:33 »

Offline tcp

  • Members
  • *
    • Violator Gaming
Re: help with zone
« Reply #7 on: 30 Oct 2009, 19:51:24 »
Sry I'm blind and can't read those small screenies.

Here's a working example mission: http://www.filefront.com/14828541/oob.utes.pbo