sreVbriefing.sqfESJ+description.extESJpInit.sqfESJmission.sqmESJ^revive_init.sqfESJl?AI_respawn\AI_respawn.sqfESJAI_respawn\AI_respawn_init.sqfESJTrevive_sqf\cam_dead.sqfESJrevive_sqf\cam_follow.sqfESJ'Yrevive_sqf\CAM_KEY_pressed.sqfESJ revive_sqf\carry.sqfESJrevive_sqf\drag.sqfESJrevive_sqf\drop_body.sqfESJrevive_sqf\go_back.sqfESJrevive_sqf\heal.sqfESJarevive_sqf\init_related_scripts.sqfFSJrevive_sqf\isplayer.sqfFSJ revive_sqf\marker_color.sqfFSJrevive_sqf\mission_end.sqfFSJrevive_sqf\onConnect.sqfFSJrevive_sqf\putDown_body.sqfFSJrevive_sqf\respawn_at_base.sqfFSJ(revive_sqf\respawn_at_base_jip.sqfFSJrevive_sqf\respawn_at_base_water.sqfFSJrevive_sqf\respawn_counter.sqfFSJGrevive_sqf\revive_init.sqfFSJ revive_sqf\Revive_player.sqfFSJHrevive_sqf\show_map_loc.sqfFSJ\revive_sqf\team_killer.sqfFSJNrevive_sqf\trigger_mkr.sqfFSJ-'revive_sqf\COD\body_damage.sqfGSJorevive_sqf\dialogs\config.cppGSJyrevive_sqf\dialogs\dead_cam_dialog.hppGSJ: revive_sqf\dialogs\define.hppGSJ7revive_sqf\dialogs\OK_map.hppGSJrevive_sqf\dialogs\respawn_button_1.hppGSJrevive_sqf\dialogs\respawn_button_1b.hppGSJPrevive_sqf\dialogs\respawn_button_1c.hppGSJArevive_sqf\dialogs\respawn_button_1map.hppGSJrevive_sqf\dialogs\respawn_button_2.hppGSJrevive_sqf\dialogs\respawn_button_2b.hppGSJ revive_sqf\dialogs\respawn_button_2map.hppGSJrevive_sqf\dialogs\respawn_button_3.hppGSJrevive_sqf\dialogs\respawn_button_3b.hppGSJrevive_sqf\dialogs\respawn_button_3map.hppGSJrevive_sqf\dialogs\respawn_button_4.hppGSJrevive_sqf\dialogs\respawn_button_4b.hppGSJrevive_sqf\dialogs\respawn_button_4map.hppGSJrevive_sqf\dialogs\rev_cam_dialog.hppGSJ!revive_sqf\functions\AIBehaviour.sqfHSJn(revive_sqf\functions\AI_throwSmoke.sqfHSJrevive_sqf\functions\CallOut.sqfHSJrevive_sqf\functions\DeleteUncBody.sqfHSJMrevive_sqf\functions\dropWeapons.sqfHSJrevive_sqf\functions\GetTerrainSlope.sqfHSJrevive_sqf\functions\I_need_help.sqfHSJrevive_sqf\functions\LeaderFix.sqfHSJrevive_sqf\functions\LivesRemain.sqfHSJrevive_sqf\functions\RespawnPos1.sqfHSJrevive_sqf\functions\RespawnPos2.sqfHSJ]revive_sqf\functions\RespawnPos2AI.sqfHSJrevive_sqf\functions\respawn_chance.sqfHSJrevive_sqf\functions\respawn_time.sqfHSJ[revive_sqf\functions\SlopeFix.sqfHSJ;revive_sqf\functions\toggle_dialog_fade.sqfHSJrevive_sqf\functions\UncAnimFix.sqfHSJhrevive_sqf\functions\wait_check.sqfHSJmrevive_sqf\functions\WaterFix.sqfHSJrevive_sqf\heal_sqf\heal.sqfISJrevive_sqf\heal_sqf\player_heal.sqfISJOrevive_sqf\Load_wounded\Load_act.sqfISJrevive_sqf\Load_wounded\load_wounded.sqfISJwrevive_sqf\Load_wounded\unLoad_act.sqfISJrevive_sqf\medic\bandage.sqfISJrevive_sqf\medic\bandage_teammate.sqfISJurevive_sqf\medic\supplies.sqfISJ2revive_sqf\mobile\deploy_camo.sqfISJ&revive_sqf\mobile\deploy_camo_man.sqfISJrevive_sqf\mobile\mobile_Marker.sqfISJrevive_sqf\mobile\mobile_remove_spawn.sqfJSJrevive_sqf\mobile\mobile_spawn.sqfJSJ revive_sqf\mobile\move_spawn.sqfJSJTrevive_sqf\mobile\stow_camo.sqfJSJ$revive_sqf\mobile\stow_camo_man.sqfJSJrevive_sqf\mobile\vcl_respawn.sqfJSJrevive_sqf\respawn\init_respawn.sqfJSJrevive_sqf\respawn\respawn.sqfJSJrevive_sqf\Sound\UNIV_v05.lipJSJrevive_sqf\Sound\UNIV_v05.oggJSJK revive_sqf\Sound\UNIV_v06.lipJSJrevive_sqf\Sound\UNIV_v06.oggJSJ#revive_sqf\Sound\UNIV_v07.lipJSJrevive_sqf\Sound\UNIV_v07.oggJSJ#revive_sqf\Sound\UNIV_v10.lipJSJrevive_sqf\Sound\UNIV_v10.oggJSJrevive_sqf\Sound\UNIV_v11.lipJSJrevive_sqf\Sound\UNIV_v11.oggJSJ8,revive_sqf\Sound\UNIV_v18.lipJSJrevive_sqf\Sound\UNIV_v18.oggJSJ"revive_sqf\Sound\UNIV_v24.lipJSJVrevive_sqf\Sound\UNIV_v24.oggKSJvrevive_sqf\Sound\UNIV_v25.lipKSJ~revive_sqf\Sound\UNIV_v25.oggKSJwrevive_sqf\Sound\UNIV_v31.lipKSJtrevive_sqf\Sound\UNIV_v31.oggKSJsrevive_sqf\Sound\UNIV_v50.lipKSJrevive_sqf\Sound\UNIV_v50.oggKSJt#revive_sqf\Sound\UNIV_v51.lipKSJrevive_sqf\Sound\UNIV_v51.oggKSJ(WP_scripts\East_WP1.sqfKSJWP_scripts\East_WP2.sqfKSJWP_scripts\East_WP3.sqfKSJWP_scripts\East_WP4.sqfKSJWP_scripts\reinforceWP.sqfKSJplayer createDiaryRecord["Diary", ["License", "License - These scripts are not to be used for commercial purposes or to be modified without the authors' prior consent"]]; player createDiaryRecord["Diary", ["Acknowledgements", "The revive scripts were coded by norrin (norrin@iinet.net.au) and based upon the concepts of PRiMe, toadlife, [APS]Gnat and Mongoose_84 and their work for OFP. Special Thanks to Hoz at OFPEC for his testing of the latest versions and his many suggestions and improvements. HulkingUnicorn for his scripting advice, testing and suggestions. Also to satexas69, MCPXXL, SNKMAN, alef, sickboy, vengeance1 (JAAF), Legislator, Xeno and Raedor for all their suggestions, advice and support and to all at the BIS forums. Last but by no means least to Foxhound and ArmAholic for their great support and providing mirrors for all my scripts. Other Scripts Used: OFPEC Free camera script (http://www.ofpec.com/forum/index.php?topic=32970.0) by Hoz and Mandoble. Some of the voice arrray stuff stolen with the permission of SNKMAN from ArmA Group Link II Plus! "]]; player createDiaryRecord["Diary", ["Additional Mission Notes","We have had reports from locals friendly to our cause that enemy forces are patrolling the woods in an attempt to locate our FOB and weapon cache"]]; player createDiaryRecord["Diary", ["Objectives","Proceed through the forest west of Myshkino and clear the village of hostile forces."]]; player createDiaryRecord["Diary", ["Background","As a result of our previous raids on Russian forces, several days ago a small Russian garrison was stationed in the nearby village of Myshkino to train local insurgents in their fight against CDF and US forces. This garrison represents a clear and present danger to our activities in this area and it must be destroyed at all costs."]]; // Mission Header class Header { gameType = Coop; minPlayers = 1; maxPlayers = 5; }; onLoadMission = "Deep in the Woods"; OnLoadMissionTime = FALSE; // description.ext settings for revive /////////////////////////////////////////////////////////////////////////////////////////// respawn = "BASE"; respawndelay = 4; disabledAI = 0; #include "revive_sqf\dialogs\config.cpp" #include "revive_sqf\dialogs\define.hpp" #include "revive_sqf\dialogs\rev_cam_dialog.hpp" #include "revive_sqf\dialogs\respawn_button_1.hpp" #include "revive_sqf\dialogs\respawn_button_2.hpp" #include "revive_sqf\dialogs\respawn_button_3.hpp" #include "revive_sqf\dialogs\respawn_button_4.hpp" #include "revive_sqf\dialogs\respawn_button_1b.hpp" #include "revive_sqf\dialogs\respawn_button_1c.hpp" #include "revive_sqf\dialogs\respawn_button_2b.hpp" #include "revive_sqf\dialogs\respawn_button_3b.hpp" #include "revive_sqf\dialogs\respawn_button_4b.hpp" #include "revive_sqf\dialogs\respawn_button_1map.hpp" #include "revive_sqf\dialogs\respawn_button_2map.hpp" #include "revive_sqf\dialogs\respawn_button_3map.hpp" #include "revive_sqf\dialogs\respawn_button_4map.hpp" #include "revive_sqf\dialogs\OK_map.hpp" #include "revive_sqf\dialogs\dead_cam_dialog.hpp" /////////////////////////////////////////////////////////////////////////////////////////// titleParam1 = "Time"; valuesParam1[] = {-6, 0, 8, 13}; defValueParam1 = 0; textsParam1[] = {"Morning", "Clear day", "Sundown", "Night"}; /////////////////////////////////////////////////////////////////////////////////////////// titleParam2 = "Number of Revives:"; valuesParam2[] = {2000,1000,20,10,7,5}; defValueParam2 = 7; textsParam2[] = {"No Revive","Infinite - Cadet","20 - Easy ","10 - Normal","7 - Hard","5 - Extreme"}; /////////////////////////////////////////////////////////////////////////////////////////////begin init.sqf //Initialise revive script (this next line is needed for revive script) server execVM "revive_init.sqf"; //Mission parameters skiptime Param1; //Add briefing execVM "briefing.sqf"; //End intro music sleep 25; 10 fadeMusic 0; if(true) exitWith {}; version=11; class Mission { addOns[]= { "cacharacters2", "chernarus", "caweapons_ammoboxes", "camisc3", "CABuildings", "CAMisc", "ca_modules_animals", "CA_Modules_Alice", "ca_modules_clouds", "ca_animals2_chicken", "ca_animals2_cow", "CAWheeled2_V3S", "CAWheeled", "CAWheeled2_Kamaz", "ca_animals2_goat", "cadata", "ca_animals2_rabbit", "ca_animals2_dogs_fin", "ca_animals2_wildboar" }; addOnsAuto[]= { "cacharacters2", "CA_Modules_Alice", "CAWheeled2_Kamaz", "caweapons_ammoboxes", "camisc3", "CABuildings", "CAMisc", "ca_animals2_chicken", "ca_animals2_cow", "CAWheeled", "ca_animals2_goat", "cadata", "ca_animals2_rabbit", "ca_animals2_dogs_fin", "ca_animals2_wildboar", "chernarus" }; randomSeed=14696005; class Intel { briefingName="Deep in the Woods 02h"; startWeather=0.70649815; startFog=0.78079945; forecastWeather=0.80557054; year=2008; month=10; day=11; hour=9; minute=20; }; class Groups { items=14; class Item0 { side="WEST"; class Vehicles { items=5; class Item0 { position[]={1406.0822,206.98682,6936.3154}; azimut=20; id=0; side="WEST"; vehicle="CDF_Soldier_TL"; player="PLAYER COMMANDER"; leader=1; rank="MAJOR"; skill=0.60000002; text="s1"; }; class Item1 { position[]={1401.0103,206.13777,6941.0859}; id=2; side="WEST"; vehicle="CDF_Soldier_Medic"; player="PLAY CDG"; rank="CAPTAIN"; skill=0.60000002; text="s2"; }; class Item2 { position[]={1399.714,205.65329,6934.2646}; id=3; side="WEST"; vehicle="CDF_Soldier_GL"; player="PLAY CDG"; skill=0.60000002; text="s3"; }; class Item3 { position[]={1403.8889,206.35471,6929.9785}; id=4; side="WEST"; vehicle="CDF_Soldier_MG"; player="PLAY CDG"; skill=0.60000002; text="s4"; }; class Item4 { position[]={1406.9202,206.8708,6928.9707}; id=85; side="WEST"; vehicle="CDF_Soldier_RPG"; player="PLAY CDG"; skill=0.60000002; text="s5"; }; }; class Waypoints { items=1; class Item0 { position[]={1992.3002,252.03967,7338.2002}; class Effects { }; showWP="NEVER"; }; }; }; class Item1 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={13616.028,32.803883,3202.4204}; id=1; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="server"; }; }; }; class Item2 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={2087.8167,255.15768,7248.1797}; id=24; side="LOGIC"; vehicle="AliceManager"; leader=1; skill=0.60000002; }; }; }; class Item3 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={1384.8054,201.94208,6926.1201}; azimut=155; id=29; side="WEST"; vehicle="CDF_Soldier"; leader=1; skill=0.60000002; }; }; }; class Item4 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={1382.5316,201.45407,6931.6143}; azimut=80; id=30; side="WEST"; vehicle="CDF_Soldier_Officer"; leader=1; skill=0.60000002; }; }; }; class Item5 { side="CIV"; class Vehicles { items=1; class Item0 { position[]={1386.2898,202.81409,6943.6123}; azimut=80; id=31; side="CIV"; vehicle="Doctor"; leader=1; skill=0.60000002; }; }; }; class Item6 { side="EAST"; class Vehicles { items=4; class Item0 { position[]={1783.077,246.12695,6735.311}; azimut=300; id=34; side="EAST"; vehicle="RU_Soldier_SL"; leader=1; rank="LIEUTENANT"; skill=0.59999996; init="nul = [this, 3, 10, ""ES2"",""WP_scripts\East_WP1.sqf""] execVM ""AI_respawn\AI_respawn_init.sqf""; "; }; class Item1 { position[]={1788.9071,245.55606,6735.4092}; azimut=300; id=35; side="EAST"; vehicle="Ins_Soldier_AR"; rank="SERGEANT"; skill=0.46666664; }; class Item2 { position[]={1789.9071,244.49634,6737.1411}; azimut=300; id=36; side="EAST"; vehicle="RU_Soldier_AT"; rank="SERGEANT"; skill=0.46666664; }; class Item3 { position[]={1790.9071,243.47287,6738.873}; azimut=300; id=37; side="EAST"; vehicle="Ins_Soldier_Sab"; rank="CORPORAL"; skill=0.33333331; }; }; }; class Item7 { side="EAST"; class Vehicles { items=5; class Item0 { position[]={1775.1465,284.81485,7269.5371}; id=38; side="EAST"; vehicle="RU_Soldier_SL"; leader=1; rank="LIEUTENANT"; skill=0.59999996; init="nul = [this, 2, 10, ""ES1"",""WP_scripts\East_WP2.sqf""] execVM ""AI_respawn\AI_respawn_init.sqf""; "; }; class Item1 { position[]={1778.1465,283.62094,7264.5371}; id=39; side="EAST"; vehicle="Ins_Soldier_MG"; rank="SERGEANT"; skill=0.46666664; }; class Item2 { position[]={1780.1465,283.23962,7264.5371}; id=40; side="EAST"; vehicle="Ins_Soldier_2"; rank="SERGEANT"; skill=0.46666664; }; class Item3 { position[]={1782.1465,282.8493,7264.5371}; id=41; side="EAST"; vehicle="RU_Soldier_LAT"; rank="CORPORAL"; skill=0.33333331; }; class Item4 { position[]={1785.6307,282.17825,7264.6313}; id=86; side="EAST"; vehicle="Ins_Soldier_Sab"; skill=0.60000002; }; }; }; class Item8 { side="EAST"; class Vehicles { items=12; class Item0 { position[]={2451.5325,297.10999,7242.8042}; id=42; side="EAST"; vehicle="RU_Soldier_SL"; leader=1; rank="LIEUTENANT"; skill=1; text="ERein1"; init="this moveINCargo truck1"; }; class Item1 { position[]={2454.5325,297.41245,7237.8042}; id=44; side="EAST"; vehicle="RU_Soldier_MG"; rank="SERGEANT"; skill=0.46666664; init="this moveINCargo truck1"; }; class Item2 { position[]={2456.5325,297.73776,7237.8042}; id=45; side="EAST"; vehicle="RU_Soldier_AT"; rank="SERGEANT"; skill=0.46666664; init="this moveINCargo truck1"; }; class Item3 { position[]={2458.5325,298.06308,7237.8042}; id=46; side="EAST"; vehicle="RU_Soldier_LAT"; rank="CORPORAL"; skill=0.33333331; init="this moveINCargo truck1"; }; class Item4 { position[]={2460.5325,298.38821,7237.8042}; id=47; side="EAST"; vehicle="RU_Soldier_GL"; rank="CORPORAL"; skill=0.33333331; init="this moveINCargo truck1"; }; class Item5 { position[]={2462.5325,298.70819,7237.8042}; id=48; side="EAST"; vehicle="RU_Soldier_Marksman"; rank="CORPORAL"; skill=0.33333331; init="this moveINCargo truck1"; }; class Item6 { position[]={2464.5325,299.0282,7237.8042}; id=49; side="EAST"; vehicle="RU_Soldier_MG"; rank="CORPORAL"; skill=0.33333331; init="this moveINCargo truck1"; }; class Item7 { position[]={2466.5325,299.34818,7237.8042}; id=50; side="EAST"; vehicle="RU_Soldier_LAT"; rank="CORPORAL"; skill=0.33333331; init="this moveINCargo truck1"; }; class Item8 { position[]={2468.5325,299.66882,7237.8042}; id=51; side="EAST"; vehicle="RU_Soldier_AR"; skill=0.2; }; class Item9 { position[]={2470.5325,299.73367,7232.8042}; id=52; side="EAST"; vehicle="RU_Soldier_AT"; skill=0.2; }; class Item10 { position[]={2472.5325,300.04437,7232.8042}; id=53; side="EAST"; vehicle="RU_Soldier_GL"; skill=0.2; }; class Item11 { position[]={2474.5325,300.36169,7232.8042}; id=54; side="EAST"; vehicle="RU_Soldier"; skill=0.2; }; }; }; class Item9 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={2446.5325,296.12375,7237.8042}; azimut=270; id=43; side="EAST"; vehicle="Kamaz"; leader=1; rank="SERGEANT"; skill=1; text="truck1"; }; }; class Waypoints { items=3; class Item0 { position[]={2195.1287,275.80136,7276.0864}; speed="NORMAL"; combat="CARELESS"; synchronizations[]={0}; class Effects { }; showWP="NEVER"; }; class Item1 { position[]={2077.6531,260.36789,7314.6514}; type="UNLOAD"; class Effects { }; showWP="NEVER"; }; class Item2 { position[]={2054.0256,257.09619,7322.3511}; expActiv="truck1 setFuel 0; nul = [ERein1]execVM ""WP_scripts\reinforceWP.sqf""; "; class Effects { }; showWP="NEVER"; }; }; }; class Item10 { side="EAST"; class Vehicles { items=4; class Item0 { position[]={1923.9875,267.01608,7534.6089}; id=55; side="EAST"; vehicle="Ins_Soldier_CO"; leader=1; rank="SERGEANT"; skill=0.46666664; init="nul = [this, 2, 10, ""ESP3"",""WP_scripts\East_WP3.sqf""] execVM ""AI_respawn\AI_respawn_init.sqf""; "; }; class Item1 { position[]={1929.7726,268.03427,7541.0898}; id=56; side="EAST"; vehicle="Ins_Soldier_AR"; rank="CORPORAL"; skill=0.33333331; }; class Item2 { position[]={1928.9875,267.15601,7529.6089}; id=57; side="EAST"; vehicle="Ins_Soldier_GL"; rank="CORPORAL"; skill=0.33333331; }; class Item3 { position[]={1930.9875,267.388,7529.6089}; id=58; side="EAST"; vehicle="Ins_Soldier_AT"; skill=0.2; }; }; }; class Item11 { side="EAST"; class Vehicles { items=5; class Item0 { position[]={2068.7747,263.74713,7347.5249}; id=59; side="EAST"; vehicle="Ins_Soldier_CO"; leader=1; rank="SERGEANT"; skill=0.46666664; init="nul = [this, 2, 10, ""ESP4"",""WP_scripts\East_WP4.sqf""] execVM ""AI_respawn\AI_respawn_init.sqf""; "; }; class Item1 { position[]={2077.7747,263.90781,7342.5249}; id=60; side="EAST"; vehicle="Ins_Soldier_2"; skill=0.2; }; class Item2 { position[]={2081.7747,264.66113,7342.5249}; id=61; side="EAST"; vehicle="Ins_Soldier_1"; skill=0.2; }; class Item3 { position[]={2083.7747,265.03778,7342.5249}; id=62; side="EAST"; vehicle="Ins_Soldier_2"; skill=0.2; }; class Item4 { position[]={2067.2527,262.40479,7343.2305}; id=87; side="EAST"; vehicle="Ins_Soldier_GL"; skill=0.60000002; }; }; }; class Item12 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={2057.9043,268.86542,7386.0425}; azimut=205; id=83; side="EAST"; vehicle="RU_Soldier"; leader=1; skill=0.60000002; }; }; }; class Item13 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={2076.1135,269.34839,7366.6133}; azimut=215; id=88; side="EAST"; vehicle="Ins_Soldier_2"; leader=1; skill=0.60000002; }; }; }; }; class Vehicles { items=49; class Item0 { position[]={1386.5791,202.54578,6930.1279}; azimut=270; id=5; side="EMPTY"; vehicle="USBasicAmmunitionBox"; leader=1; skill=0.60000002; }; class Item1 { position[]={1386.5979,202.59166,6931.6509}; azimut=270; id=6; side="EMPTY"; vehicle="USBasicWeaponsBox"; leader=1; skill=0.60000002; }; class Item2 { position[]={1383.0208,201.57303,6930.9717}; id=7; side="EMPTY"; vehicle="Land_CamoNetVar_NATO"; skill=0.60000002; }; class Item3 { position[]={1382.6427,201.76324,6941.6011}; azimut=90; id=8; side="EMPTY"; vehicle="MASH"; skill=0.60000002; }; class Item4 { position[]={1377.5029,199.7155,6922.1055}; azimut=270; id=9; side="EMPTY"; vehicle="CampEast"; skill=0.60000002; }; class Item5 { position[]={1377.6091,199.54111,6915.3613}; azimut=270; id=10; side="EMPTY"; vehicle="CampEast"; skill=0.60000002; }; class Item6 { position[]={1389.0522,202.93173,6921.3711}; id=11; side="EMPTY"; vehicle="Land_Campfire_burning"; leader=1; skill=0.60000002; }; class Item7 { position[]={1494.2969,236.20879,7043.3086}; azimut=315; id=12; side="EMPTY"; vehicle="BRDMWreck"; skill=0.60000002; }; class Item8 { position[]={1383.205,201.57726,6929.2437}; azimut=90; id=13; side="EMPTY"; vehicle="FoldTable"; skill=0.60000002; }; class Item9 { position[]={1380.569,200.96506,6933.7764}; id=14; side="EMPTY"; vehicle="Barrel4"; skill=0.60000002; }; class Item10 { position[]={1381.2725,201.1555,6933.542}; id=15; side="EMPTY"; vehicle="Barrel5"; skill=0.60000002; }; class Item11 { position[]={1381.4093,201.21297,6934.2261}; id=16; side="EMPTY"; vehicle="Barrel1"; skill=0.60000002; }; class Item12 { position[]={1385.7979,202.39854,6932.7861}; azimut=130; id=17; side="EMPTY"; vehicle="FoldChair"; leader=1; skill=0.60000002; text="pg"; }; class Item13 { position[]={1387.9291,202.59966,6919.186}; azimut=90; id=18; side="EMPTY"; vehicle="Axe_woodblock"; leader=1; skill=0.60000002; }; class Item14 { position[]={1382.8391,201.59177,6933.4565}; azimut=310; id=19; side="EMPTY"; vehicle="Notice_board"; leader=1; skill=0.60000002; }; class Item15 { position[]={1375.5481,199.44147,6933.6377}; azimut=45; special="NONE"; id=20; side="EMPTY"; vehicle="Satelit"; skill=0.60000002; }; class Item16 { position[]={1377.9199,200.09032,6930.96}; id=21; side="EMPTY"; vehicle="Paleta2"; leader=1; skill=0.60000002; }; class Item17 { position[]={1385.0549,202.16788,6931.874}; azimut=130; id=22; side="EMPTY"; vehicle="FoldChair"; leader=1; skill=0.60000002; text="pg_1"; }; class Item18 { position[]={1384.5076,201.99599,6931.2085}; azimut=130; id=23; side="EMPTY"; vehicle="FoldChair"; leader=1; skill=0.60000002; text="pg_2"; }; class Item19 { position[]={2032.385,263.33847,7372.9961}; azimut=130; id=25; side="AMBIENT LIFE"; vehicle="Hen"; leader=1; skill=0.60000002; }; class Item20 { position[]={2055.8506,273.66373,7417.1411}; azimut=130; id=26; side="AMBIENT LIFE"; vehicle="Cow04"; leader=1; skill=0.60000002; }; class Item21 { position[]={2070.9795,275.1958,7412.2017}; azimut=130; id=27; side="AMBIENT LIFE"; vehicle="Cow02"; leader=1; skill=0.60000002; }; class Item22 { position[]={2045.3529,264.90161,7372.0698}; azimut=130; id=28; side="AMBIENT LIFE"; vehicle="Hen"; leader=1; skill=0.60000002; }; class Item23 { position[]={1385.6234,201.71402,6911.7979}; id=32; side="EMPTY"; vehicle="UAZ_CDF"; skill=0.60000002; init="this lock true"; }; class Item24 { position[]={1567.2932,189.04454,6886.1763}; azimut=55; id=33; side="EMPTY"; vehicle="SKODAWreck"; skill=0.60000002; }; class Item25 { position[]={2015.7415,253.90877,7331.8965}; azimut=105; id=63; side="EMPTY"; vehicle="datsun1_civil_2_covered"; leader=1; skill=1; }; class Item26 { position[]={1963.4076,249.42625,7324.9146}; azimut=35; id=64; side="EMPTY"; vehicle="SkodaGreen"; leader=1; skill=1; }; class Item27 { position[]={2131.2173,274.16269,7341.9526}; id=65; side="AMBIENT LIFE"; vehicle="Goat"; skill=0.60000002; }; class Item28 { position[]={2124.1721,274.07516,7349.6411}; id=66; side="AMBIENT LIFE"; vehicle="Goat"; skill=0.60000002; }; class Item29 { position[]={1981.3438,245.71848,7294.8623}; id=67; side="AMBIENT LIFE"; vehicle="Goat"; skill=0.60000002; }; class Item30 { position[]={1994.7938,269.61017,7453.1104}; id=68; side="AMBIENT LIFE"; vehicle="Cow04"; skill=0.60000002; }; class Item31 { position[]={1986.7877,266.98114,7441.2578}; id=69; side="AMBIENT LIFE"; vehicle="Cow02"; skill=0.60000002; }; class Item32 { position[]={2067.6685,271.0715,7388.7715}; azimut=320; id=70; side="EMPTY"; vehicle="Land_tent_east"; skill=0.60000002; }; class Item33 { position[]={2076.1243,271.27112,7379.5396}; azimut=320; id=71; side="EMPTY"; vehicle="Land_tent_east"; skill=0.60000002; }; class Item34 { position[]={2064.7258,268.99554,7376.5835}; azimut=180; id=72; side="EMPTY"; vehicle="FlagCarrierRU"; skill=0.60000002; }; class Item35 { position[]={2061.1775,268.97354,7380.8936}; azimut=180; id=73; side="EMPTY"; vehicle="Land_Fire_barrel_burning"; skill=0.60000002; }; class Item36 { position[]={2082.1804,271.53821,7374.9937}; azimut=320; id=74; side="EMPTY"; vehicle="Barrels"; skill=0.60000002; }; class Item37 { position[]={2059.3103,248.57199,7232.2681}; azimut=75; id=75; side="EMPTY"; vehicle="Pile_of_wood"; skill=0.60000002; }; class Item38 { position[]={2004.8552,260.74182,7382.2349}; azimut=75; id=76; side="EMPTY"; vehicle="Tractor"; skill=0.60000002; }; class Item39 { position[]={1796.0153,206.65155,6994.9844}; id=77; side="AMBIENT LIFE"; vehicle="Rabbit"; skill=0.60000002; }; class Item40 { position[]={1739.2219,296.13943,7311.8145}; id=78; side="AMBIENT LIFE"; vehicle="Fin"; skill=0.60000002; }; class Item41 { position[]={2022.5182,252.51193,7306.6694}; id=79; side="AMBIENT LIFE"; vehicle="Fin"; skill=0.60000002; }; class Item42 { position[]={1628.2413,258.94717,7116.8408}; id=80; side="AMBIENT LIFE"; vehicle="Rabbit"; skill=0.60000002; }; class Item43 { position[]={1523.7806,259.93106,7147.0991}; id=81; side="AMBIENT LIFE"; vehicle="WildBoar"; skill=0.60000002; }; class Item44 { position[]={1688.5834,193.09377,6885.4614}; id=82; side="AMBIENT LIFE"; vehicle="WildBoar"; skill=0.60000002; }; class Item45 { position[]={1386.5725,202.50331,6928.6118}; azimut=90; id=84; side="EMPTY"; vehicle="RUBasicWeaponsBox"; skill=0.60000002; }; class Item46 { position[]={2159.5447,307.89066,7031.939}; id=89; side="AMBIENT LIFE"; vehicle="WildBoar"; skill=0.60000002; }; class Item47 { position[]={1899.1119,262.79678,7321.5576}; id=90; side="AMBIENT LIFE"; vehicle="Rabbit"; skill=0.60000002; }; class Item48 { position[]={1923.7708,221.90062,7118.0239}; id=91; side="AMBIENT LIFE"; vehicle="Rabbit"; skill=0.60000002; }; }; class Markers { items=16; class Item0 { position[]={7441.0869,351.776,8370.9209}; name="center"; type="Empty"; }; class Item1 { position[]={13676.818,45.867008,2909.4663}; name="respawn_west"; type="Empty"; }; class Item2 { position[]={16246.76,44.447113,15630.192}; name="boot_hill"; type="Empty"; }; class Item3 { position[]={1391.2057,203.72633,6932.0435}; name="Insertion"; type="mil_start"; angle=30; }; class Item4 { position[]={1782.9216,283.57465,7272.9063}; name="ES1"; type="Empty"; }; class Item5 { position[]={1786.1978,245.29272,6736.2881}; name="ES2"; type="Empty"; }; class Item6 { position[]={1636.2185,194.65814,6822.7056}; name="EWP1"; type="Empty"; }; class Item7 { position[]={1585.8939,259.13397,7118.0522}; name="EWP2"; type="Empty"; }; class Item8 { position[]={1574.2168,223.08031,6986.7363}; name="EWP3"; type="Empty"; }; class Item9 { position[]={1817.7625,211.82697,7036.6436}; name="EWP4"; type="Empty"; }; class Item10 { position[]={1915.7957,266.52588,7533.8979}; name="ESP3"; type="Empty"; }; class Item11 { position[]={2077.4102,262.18289,7337.9487}; name="ESP4"; type="Empty"; }; class Item12 { position[]={2049.9272,243.19618,7183.7705}; name="EWP5"; type="Empty"; }; class Item13 { position[]={1939.5593,230.80727,7215.6968}; name="EWP6"; type="Empty"; }; class Item14 { position[]={2002.0574,252.45369,7331.1987}; name="EWP7"; type="Empty"; }; class Item15 { position[]={1992.1603,252.02838,7338.0415}; name="obj1"; text="Capture Village"; type="mil_objective"; }; }; class Sensors { items=3; class Item0 { position[]={2007.5514,253.17784,7334.1357}; a=100; b=100; activationBy="WEST"; activationType="EAST D"; interruptable=1; age="UNKNOWN"; class Effects { titleType="TEXT"; title="You have been detected entering the village"; }; synchronizations[]={0}; }; class Item1 { position[]={1995.146,252.20773,7339.3818}; a=100; b=100; activationBy="WEST SEIZED"; timeoutMin=20; timeoutMid=20; timeoutMax=20; interruptable=1; type="END1"; age="UNKNOWN"; class Effects { track="Track07_Last_Men_Standing"; titleType="TEXT"; title="Well done! You have successful cleared the town of hostile forces."; }; }; class Item2 { position[]={1409.9485,207.57497,6932.46}; a=25; b=25; activationBy="WEST"; interruptable=1; age="UNKNOWN"; class Effects { track="Track01_Dead_Forest"; }; }; }; }; class Intro { addOns[]= { "chernarus" }; addOnsAuto[]= { "chernarus" }; randomSeed=5754289; class Intel { startWeather=0.25; forecastWeather=0.25; year=2008; month=10; day=11; hour=9; minute=20; }; }; class OutroWin { addOns[]= { "chernarus" }; addOnsAuto[]= { "chernarus" }; randomSeed=6373519; class Intel { startWeather=0.25; forecastWeather=0.25; year=2008; month=10; day=11; hour=9; minute=20; }; }; class OutroLoose { addOns[]= { "chernarus" }; addOnsAuto[]= { "chernarus" }; randomSeed=10377650; class Intel { startWeather=0.25; forecastWeather=0.25; year=2008; month=10; day=11; hour=9; minute=20; }; }; /* ARMA2 REVIVE SCRIPT - AI enabled or disabled JUNE 2009 - norrin (norrin@iinet.net.au) Version: 0.2 ArmA2 ******************************************************************************************************* See release notes for details on contributors and instructions for incorporating revive scripts into your own missions ************************************************************************************ Start revive_init.sqf */ // ===================================================================================================================== // DO NOT MODIFY THIS CODE // ===================================================================================================================== // sickboy's code modified by _xeno T_INIT = false; T_Server = false; T_Client = false; T_JIP = false; T_MP = (if (playersNumber east + playersNumber west + playersNumber resistance + playersNumber civilian > 0) then {true} else {false}); if (isServer) then { T_Server = true; if (!isNull player) then {T_Client = true}; T_INIT = true; } else { T_Client = true; if (isNull player) then { T_JIP = true; [] spawn {waitUntil {!isNull player};T_INIT = true}; } else { T_INIT = true; }; }; waitUntil {T_INIT}; // ===================================================================================================================== // THE FOLLOWING CODE CAN BE MODIFIED // ===================================================================================================================== // GENERAL REVIVE OPTIONS (Off = 0, On = 1) _mission_end_function = 0; //array no.0 - mission ends when all players are unconscious _call_out_function = 1; //array no.6 - whether a unit calls out while unconscious _water_dialog = 1; //array no.45 - whether a dialog appears when a unit dies in water so that it can auto wash ashore _unconscious_drag = 1; //array no.39 - whether a unit can drag the bodies of unconscious players _load_wounded = 1; //array no.61 - allows you to load unconscious units on vehicles _altUnc_animation = 1; //array no.54 - use alternate unconscious animation _JIP_spawn_dialog = 0; //array no.2 - whether a dialog appears when a player JIP so that he can be transported to a spawn point near the action _time_b4_JIP_spawn_dialog = 10000; //array no.17 - time before the respawn dialog appears for JIP players _perpetual_server = 0; //array no.62 - NOT IMPLEMENTED // ================================================================== // LIST OF PLAYABLE UNITS NORRN_player_units = ["s1","s2","s3","s4","s5"]; // ================================================================== // WELCOME SCREEN titleText ["Joining Mission - Deep in the Woods", "BLACK FADED", 0.2]; // This next line can be commented out or removed if it interferes with intro movies // ================================================================== // REVIVE OPTIONS _max_respawns = param2; //array no.38 - Number of lives per unit _JIP_respawns = [3,300]; //array no.63 - 0 - off or the number of lives players receive when they join in progress , JIP time after the mission starts _revive_timer = 1; //array no.7 - Whether you want to limit the amount of timer a player has while unconscious _revive_time_limit = 300; //array no.27 - Amount of time a player remains unconscious before respawning or dying _revive_damage = 0; //array no.37 - Unit's level of damage following revive _unconscious_markers = 1; //array no. 4 - Whether a marker appears on the game map at the location of the unconscious unit _caseVAC = [1, ["MASH"]]; //array no.64 - Allows units to be taken to a hospital etc to be revived _mediVAC = []; //array no.65 - NOT IMPLEMENTED _chance_ofDeath = [0,0]; //array no.66 - Two parameters in the array the first switches off/on (0/1) chance of death when shot, increases dues to hit location and number of times revived and the second parameter switches on/off the decreasing respawn timer based on how many times you have been revived, if using set respawn-time to at least 300 seconds. _dualTimer = 0; //array no.67 - NOT IMPLEMENTED - normal units can only revive for eg 30 seconds whereas medics can heal players up to 120 secs - array - [0/1 - off/on, revive timer for normal unit, timer for medic] _deadSpectator_cam = 1; //array no.92 - leave as 0 - whether a unit can spectate other friendly units when it has run out of lives // ================================================================== // RESPAWN OPTIONS _no_respawn_points = 1; //array no.12 - no of respawn points (Max number 4) _Base_1 = "insertion"; //array no.13 - spawn position names _Base_2 = ""; //array no.14 _Base_3 = ""; //array no.15 _Base_4 = ""; //array no.16 _Base_free_respawn = [1,0,0,0]; //array no.36 - select whether to allow respawning at spawn points even if enemy troops are present (options OFF = 0, ON = 1) _respawn_at_base_addWeapons = 1; //array no.11 - unit respawns with waepons it commenced the mission with _respawn_at_base_magazines = []; //array no.34 - If using the respawn_at_base_addWeapons option then place the magazine and weapon _respawn_at_base_weapons = []; //array no.35 types in the following arrays, if left blank respawns with weapons from mission start _respawn_position = 2; //array no.28 - 0 - respawn at base_1; 1 - the closest enemy free respawn point; 2 - players choice; and 3 - dies _respawnAtBaseWait = [1,10]; //array no.68 - Two parameters: 1st if = 1 makes players that respawn at base wait for (parameter 2) seconds before being able to see surroundings _objectiveBasedRP = []; //array no.69 - NOT IMPLEMENTED // Mobile Spawn Settings _mobile_spawn = 0; //array no.51 - set to 1 if you want to use mobile spawn _mobile_base_start = ""; //array no.52 _mobile_base2_start = ""; //array no.70 - NOT IMPLEMENTED _mobile_type = 0; //array no.60 - set as 0 - for vehicle and 1 for man _mobile_man = objNull; //array no.53 - place name of unit here or if not used make sure set as objNull _mobile_man2 = objNull; //array no.71 - NOT IMPLEMENTED // ================================================================== // UNITS THAT CAN REVIVE/UNITS THAT CAN BE REVIVED _can_revive = "soldierWB"; //array no.18 _can_revive_2 = ""; //array no.19 _can_revive_3 = ""; //array no.72 - NOT IMPLEMENTED _can_revive_4 = ""; //array no.73 - NOT IMPLEMENTED _can_be_revived = "soldierWB"; //array no.20 _can_be_revived_2 = ""; //array no.21 _can_be_revived_3 = ""; //array no.74 - NOT IMPLEMENTED _can_be_revived_4 = ""; //array no.75 - NOT IMPLEMENTED _medic_1 = "CDF_Soldier_Medic"; //array no.76 - Used in conjunction with medpacks and bleeding _medic_2 = ""; //array no.77 - Used in conjunction with medpacks and bleeding _medic_3 = ""; //array no.78 - NOT IMPLEMENTED _medic_4 = ""; //array no.79 - NOT IMPLEMENTED //======================================================== // MEDPACK AND BLEEDING OPTIONS _medpacks = 1; //array no.80 - Whether you want to give the units a limited number of revive kits 0/1 - no/yes _stabilisation = 0; //array no.81 - NOT IMPLEMENTED _bleeding = 1; //array no.82 - Make units bleed and require bandages _medic_medpacks = 5; //array no.83 - No of medpacks for units specified in the _medic variables - they are required for reviving units _unit_medpacks = 2; //array no.84 - No of medpacks for units specified in the _can_revive variables - they are required for reviving units _medic_bandages = 5; //array no.85 - Bandages stop bleeding _unit_bandages = 3; //array no.86 - _medic_stable = 0; //array no.100 - NOT IMPLEMENTED _unit_stable = 0; //array no.101 - NOT IMPLEMENTED _stabTime_tillDeath = 0; //array no.87 - NOT IMPLEMENTED //Time until death following revive without stabilisation // ================================================================== // ENEMY SIDE TO PLAYABLE UNITS _no_enemy_sides = 1; //array no.22 - No of Enemy sides (0, 1 or 2). _enemy_side_1 = "EAST"; //array no.23 - Enemy sides can be "EAST", "WEST", "GUER" etc _enemy_side_2 = ""; //array no.24 _enemy_side_3 = ""; //array no.88 - NOT IMPLEMENTED _enemy_side_4 = ""; //array no.89 - NOT IMPLEMENTED // ================================================================== // FRIENDLY SIDE TO PLAYABLE UNITS _allied_side_1 = "WEST"; //array no.42 - Friendly sides can be "EAST", "WEST","RESISTANCE" etc. _allied_side_2 = "WEST"; //array no.43 - If all players are from the same side make sure you set the same side for both variables eg "WEST", "WEST" _allied_side_3 = ""; //array no.90 - NOT IMPLEMENTED _allied_side_4 = ""; //array no.91 - NOT IMPLEMENTED // ================================================================== // UNCONSCIOUS CAMERA OPTIONS _follow_cam = 1; //array no.5 - option to allow viewing of friendly units while unconscious _follow_cam_distance = 250; //array no.32 - the range that unconscious players can spectate friendly units _follow_cam_team = 0; //array no.44 - set to 1 if you wish unconscious players only to spectate players within NORRN_player_units array _top_view_height = 70; //array no.55 - allows you to set the top down camera height _visible_timer = 1; //array no.41 - view a cound-down timer while unconscious _unconscious_music = 0; //array no.46 - music must appear as unc_theme in music.hpp // ================================================================== // RESPAWN DIALOG OPTIONS _nearest_teammate_dialog = 0; //array no.3 - whether a respawn dialog appears when there are no players within this distance _all_dead_dialog = 0; //array no.1 - whether a respawn dialog appears when all players are unconscious (_all_dead_player = 1) _respawn_button_timer = 20; //array no.25 - Time until respawn button appears (0 = approx. 12 seconds), NB: Set to a high number like 100000 seconds if you do not want _distance_to_friend = 250; //array no.26 - If the closest friendly unit is further than this distance away trigger respawn dialog _all_dead_player = 0; //array no.56 _all_dead_distance = 250; //array no.57 - whether a respawn dialog appears when all players within a specified distance are unconscious (_all_dead_player = 1) // ================================================================== // Bonus life for aiding team mates function _reward_function = 1; //array no.96 - specify whether a unit receives bonus lives for reviving other players _revives_required = 1; //array no.97 - Number of revives required before recieving a bonus life // ================================================================== // Team kill function _team_kill_function = 1; //array no.98 - specify whether a unit loses a life for killing team mates _no_team_kills = 1; //array no.99 - Number of teamkills before punishment // ================================================================== // CONFIGURABLE OPTIONS FOR HEAL YOURSELF FUNCTION _heal_yourself = 0; //array no.8 - whether a unit can heal damage to itself _no_of_heals = 1; //array no.29 - Number of heals that each player gets during a mission _lower_bound_heal = 0.1; //array no.30 - The damage level range between which the heal action becomes available _upper_bound_heal = 0.8; //array no.31 // ================================================================== // AI REVIVE BEHAVIOUR OPTIONS _goto_revive = 0; //array no. 9 - closest AI automatically moves to revive a downed team mate _AI_smoke = 0; //array no. 40 - if available reviving AI throws smoke on downed AI position _AI_aware = 0; //array no. 49 - AI will clear an enemy units it is aware of before auto reviving _AI_cover = 1; //array no. 50 - second AI unit moves with AI reviver to give cover _AI_dismount = 0; //array no. 58 - toggles ability of reviving AI units to dismount vehicles (1 = dismount) _call_for_AI_help = 1; //array no. 59 - allows AI units to call for help _goto_revive_distance = 500; //array no. 33 - distance AI units will move to revive a downed team mate // ================================================================== // OPTIONS FOR PLAYER'S DEAD BODIES AND EQUIPMENT - Additional revive functions with many thanks to alef (0 - off, 1 - on except for _bury_timeout) _drop_weapons = 1; //array no.93 - should the respawned player drop his weapons where he died? _cadaver = 0; //array no.94 - should the respawned player's body remain there? _bury_timeout = 12; //array no.95 - if drop weapons OR player body, how long before the body is buried? // 0=maximum (1200s) , n=seconds up to 1200s (hard coded) // ================================================================== // USER CODE - eg. NORRNCustonexec1="execvm ""myscript.sqf"";hint ""myoutput"";" NORRNCustomExec1 ="if (_name == player) then {execVm 'briefing.sqf'};"; // Exec1 occurs following being revived NORRNCustomExec2 =""; // Exec2 occurs when you team kill NORRNCustomExec3 ="if (_name == player) then {execVm 'briefing.sqf'};"; // Exec3 occurs when you spawn at base NORRNCustomExec4 =""; // Exec4 occurs when you try and spawn at base but it is still occupied NORRNCustomExec5 =""; // Must use variables: MAP_r_rejoin (false - first time, // true - rejoining the server, and // MAP_r_no_lives - number of lives if you rejoin server) // ===================================================================================================================== // DO NOT MODIFY THE FOLLOWING CODE // ===================================================================================================================== NORRN_revive_array = []; NORRN_revive_array = [_mission_end_function,_all_dead_dialog,_JIP_spawn_dialog,_nearest_teammate_dialog,_unconscious_markers,_follow_cam,_call_out_function,_revive_timer, _heal_yourself,_goto_revive,_unconscious_invincibility,_respawn_at_base_addWeapons,_no_respawn_points,_Base_1,_Base_2,_Base_3,_Base_4,_time_b4_JIP_spawn_dialog, _can_revive,_can_revive_2,_can_be_revived,_can_be_revived_2,_no_enemy_sides,_enemy_side_1,_enemy_side_2,_respawn_button_timer,_distance_to_friend, _revive_time_limit,_respawn_position,_no_of_heals,_lower_bound_heal,_upper_bound_heal,_follow_cam_distance,_goto_revive_distance,_respawn_at_base_magazines, _respawn_at_base_weapons, _Base_free_respawn, _revive_damage, _max_respawns, _unconscious_drag,_AI_smoke,_visible_timer,_allied_side_1,_allied_side_2,_follow_cam_team, _water_dialog, _unconscious_music, _enemy_units_1, _enemy_units_2, _AI_aware,_AI_cover,_mobile_spawn,_mobile_base_start,_mobile_man,_altUnc_animation,_top_view_height, _all_dead_player,_all_dead_distance,_AI_dismount,_call_for_AI_help,_mobile_type,_load_wounded,_perpetual_server,_JIP_respawns,_caseVAC,_mediVAC,_chance_ofDeath,_dualTimer, _respawnAtBaseWait,_objectiveBasedRP,_mobile_base2_start,_mobile_man2,_can_revive_3,_can_revive_4,_can_be_revived_3,_can_be_revived_4,_medic_1,_medic_2,_medic_3,_medic_4, _medpacks,_stabilisation,_bleeding,_medic_medpacks,_unit_medpacks,_medic_bandages,_unit_bandages,_stabTime_tillDeath,_enemy_side_3,_enemy_side_4, _allied_side_3,_allied_side_4,_deadSpectator_cam,_drop_weapons,_cadaver,_bury_timeout,_reward_function,_revives_required,_team_kill_function,_no_team_kills,_medic_stable, _unit_stable]; // start related revive functions [] execVM "revive_sqf\init_related_scripts.sqf"; if (true) exitWith {}; //Last edited 12/06/09 // AI_respawn.sqf // JULY 2009 - norrin if (!isServer) exitWith {}; _unit = _this select 0; _lives = _this select 1; _delay = _this select 2; _respawn_point = _this select 3; _move_script = _this select 4; _group = _this select 5; _side = _this select 6; _AI_unitArray = _this select 7; _AI_magArray = _this select 8; _AI_wepArray = _this select 9; _unitsGroup = units (group _unit); while {(count _unitsGroup) > 0} do { _remainingUnits = []; {if (alive _x) then {_remainingUnits = _remainingUnits + [_x]}} forEach _unitsGroup; _unitsGroup = _remainingUnits; sleep 1; }; deleteGroup _group; if (_lives == 0) exitWith {}; _lives = _lives - 1; _wait = Time + _delay; waitUntil {Time > _wait}; _group = createGroup _side; {_x createUnit [(getMarkerPos _respawn_point), _group];} forEach _AI_unitArray; sleep 2; //hint "AI respawn"; _unitsGroup = units _group; {_x disableAI "MOVE"} forEach _unitsGroup; for [{ _loop = 0 },{ _loop < count _unitsGroup},{ _loop = _loop + 1}] do { _guy = _unitsGroup select _loop; removeAllWeapons _guy; {_guy removeMagazine _x} forEach magazines _guy; removeAllItems _guy; {_guy addMagazine _x} forEach (_AI_magArray select _loop); {_guy addWeapon _x} forEach (_AI_wepArray select _loop); _guy selectWeapon (primaryWeapon _guy); _guy setSkill (_AI_skillArray select _loop); sleep 0.1; }; {_x enableAI "MOVE"} forEach _unitsGroup; _leader = leader _group; [_leader, _lives, _delay, _respawn_point, _move_script, _group, _side, _AI_unitArray,_AI_magArray, _AI_wepArray] execVM "AI_respawn\AI_respawn.sqf"; [_leader] execVM _move_script; if (true) exitWith {}; // AI_respawn_init.sqf // JULY 2009 - norrin (norrin@iinet.net.au) if (!isServer) exitWith {}; _unit = _this select 0; _lives = _this select 1; _delay = _this select 2; _respawn_point = _this select 3; _move_script = _this select 4; _unitsGroup = units (group _unit); _side = side _unit; sleep 2; _AI_unitArray = []; _AI_magArray = []; _AI_wepArray = []; _AI_skillArray = []; {_AI_unitArray = _AI_unitArray + [typeOf _x]; _AI_magArray = _AI_magArray + [(magazines _x)]; _AI_wepArray = _AI_wepArray + [(weapons _x)]; _AI_skillArray = _AI_skillArray + [skill _x]}forEach _unitsGroup; [_unit, _lives, _delay, _respawn_point, _move_script, _group, _side, _AI_unitArray,_AI_magArray, _AI_wepArray,_AI_skillArray] execVM "AI_respawn\AI_respawn.sqf"; [_unit] execVM _move_script; if (true)exitWith {}; /* DEAD SPECTATE SCRIPT Upon the player falling dead creates a camera that follows the nearest alive friendly unit JULY 2009 - norrin ************************************************************************************************************************** Start camera_follow.sqf */ disableserialization; private ["_alive_friends","_all_dead_dialog","_allUnits","_c","_camera_friends","_Camera_target","_camx","_camy","_camz","_can_be_revived","_can_be_revived_2","_d","_destroy","_destroy2","_dialog_1","_dialog_2","_display","_distance_to_friend","_e","_f","_follow_cam","_follow_cam_distance","_foo","_friends","_index","_index_friends","_max_box","_name_player","_nearest_friend","_nearest_teammate_dialog","_no_respawn_points","_Object","_pos","_respawn_button_timer","_show_respawn_time","_target","_me"]; //define variables _Object = _this select 0; _pos = _this select 1; _foo = []; _allUnits = []; _alive_friends = []; _destroy = false; _switch = false; NORRN_FOCUS_CAM_ON = 0; NORRN_REVIVE_CAM_TYPE = 0; NORRN_CAM_NVG = false; NORRNAllUnits = []; _boot_hill = getMarkerPos "Boot_hill"; _respawn_mrkr = NORRN_respawn_mrkr; _top_view_height = NORRN_revive_array select 55; _r_dialog_0 = ""; _r_display = ""; showcinemaborder false; //set camera to target body _camx = _pos select 0; _camy = _pos select 1; _camz = _pos select 2; NORRN_REVIVE_cam = "camera" CamCreate [_camx,_camy+5,_camz+1]; NORRN_REVIVE_cam CamSetTarget object; NORRN_REVIVE_cam CameraEffect ["INTERNAL","Back"]; NORRN_REVIVE_cam CamCommit 2; hint ""; //setVars for free camera _angh = 0; _angv = 45; // ================================================================================================================================= //Thanks to Kegetys for this code _t = createTrigger["EmptyDetector", (player modelToWorld [0,0,0]) ]; _t setTriggerType "NONE"; _t setTriggerStatements ["this", "NORRNAllUnits = thislist", ""]; _t setTriggerArea[50000, 50000, 0, false]; _t setTriggerActivation["ANY", "PRESENT", false]; sleep 2; {if(side _x != sideLogic) then {_foo = _foo + [_x]}} forEach NORRNAllUnits; {if (alive _x) then {_allUnits = _allUnits + (crew _x)}} forEach _foo; // ================================================================================================================================= {if ((_x distance _boot_hill) > 100 && alive _x || (_x distance _respawn_mrkr) > 100 && alive _x) then {_alive_friends = _alive_friends + [_x]}} forEach _allUnits; COUNT_CAM_friends = count _alive_friends; //create dialog and initialise keyboard; _r_dialog_0 = createDialog "dead_cam_dialog"; _r_display = findDisplay 99128; _r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]; titletext [" ","BLACK IN",1]; CAM_KEY_pressed = compile preprocessfile "revive_sqf\CAM_KEY_pressed.sqf"; //change camera via dialog lbClear 10004; _index = lbAdd[10004, "3rd Person"]; _index = lbAdd[10004, "Top Down"]; _index = lbAdd[10004, "Front Side"]; _index = lbAdd[10004, "1st Person"]; _index = lbAdd[10004, "Follow/Free"]; lbSetCurSel [10004, 0]; //change target via dialog lbClear 10005; {if (alive _x) then {_index_friends = lbAdd[10005, name _x]}} forEach _alive_friends; lbSetCurSel [10005, 0]; while {!_destroy} do { scopeName "FollowCam_01"; if (mission_Over) then {sleep 5; _destroy = true;breakOut "FollowCam_01";}; _new_friends = []; {if ((_x distance _boot_hill) > 100 && (_x distance _respawn_mrkr) > 100 && alive _x) then {_new_friends = _new_friends + [_x]}} forEach _allUnits; if (count _new_friends != COUNT_CAM_friends) then {_alive_friends = _new_friends; COUNT_CAM_friends = count _new_friends}; _camera_friends = _alive_friends; //change target via dialog lbClear 10005; {if (alive _x) then {_index_friends = lbAdd[10005, name _x]}} forEach _camera_friends; lbSetCurSel [10005, lbCurSel 10005]; if (dialog) then { NORRN_REVIVE_CAM_TYPE = lbCurSel 10004; NORRN_FOCUS_CAM_ON = (lbCurSel 10005); _unit = _camera_friends select NORRN_FOCUS_CAM_ON; _target = vehicle _unit; }; if (!dialog) then {if (!isNull _me) then {_target = _me; NORRN_REVIVE_cam camsettarget _target;NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [-3, +1, (_max_box select 2) +1];NORRN_REVIVE_cam camcommit 1};}; if (NORRN_REVIVE_CAM_TYPE == 0) then {_target switchCamera "EXTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"];}; if (NORRN_REVIVE_CAM_TYPE == 1) then {NORRN_REVIVE_cam camsettarget _target; NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [0, -2, _top_view_height];NORRN_REVIVE_cam camcommit 0.5}; if (NORRN_REVIVE_CAM_TYPE == 2) then {NORRN_REVIVE_cam camsettarget _target; NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [-1.5, 3, 0.2];NORRN_REVIVE_cam camSetFov 1.1; NORRN_REVIVE_cam camcommit 0.5}; if (NORRN_REVIVE_CAM_TYPE == 3) then {_target switchCamera "INTERNAL";NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]}; //======================================================================================== // Free cam courtesy of hoz and mandoble see: OFPEC - see: http://www.ofpec.com/forum/index.php?topic=32970.0 if (NORRN_REVIVE_CAM_TYPE == 4) then { NORRN_REVIVE_cam camsettarget _target; NORRN_REVIVE_cam cameraeffect ["internal", "back"]; if (OFPEC_MouseButtons select 1) then { if (((OFPEC_MouseCoord select 0) >= 0) && ((OFPEC_MouseCoord select 0) <= 1) && ((OFPEC_MouseCoord select 1) >= 0) && ((OFPEC_MouseCoord select 1) <= 1)) then { _deltah = (0.5 - (OFPEC_MouseCoord select 0))*10/0.2; _deltav = (0.5 - (OFPEC_MouseCoord select 1))*10/0.2; _angv = (_angv + _deltav); _angh = (_angh + _deltah); _angv = _angv max 0; _angv = _angv min 89; }; }; _free_pos = [(getpos _target select 0) + sin(_angh)*OFPEC_range_to_unit, (getpos _target select 1) + cos(_angh)*OFPEC_range_to_unit, (getpos _target select 2) + OFPEC_range_to_unit*sin(_angv)]; NORRN_REVIVE_cam camSetPos _free_pos; NORRN_REVIVE_cam camCommit 0.5; }; //======================================================================================== sleep 0.02; }; //destroy camera if (_destroy || _destroy2) exitWith { if (_destroy) then { sleep 0; }; camUseNVG false; closeDialog 4; closeDialog 3; closeDialog 2; closeDialog 1; closeDialog 0; if (_unc_music == 1) then {playMusic ""}; if (mission_Over) then {titletext ["Mission Failed - all players are unconscious","BLACK", 4]; sleep 1}; player switchCamera "INTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]; CamDestroy NORRN_REVIVE_cam; deleteVehicle _Object; }; //Last edited 08/07/09/* CAMERA_FOLLOW SCRIPT Upon the player falling unconcious creates a camera that follows the nearest alive friendly unit JULY 2009 - norrin Originally converted by xeno to SQF ************************************************************************************************************************** Start camera_follow.sqf */ disableserialization; private ["_alive_friends","_all_dead_dialog","_allUnits","_c","_camera_friends","_Camera_target","_camx","_camy","_camz","_can_be_revived","_can_be_revived_2","_d","_destroy","_destroy2","_dialog_1","_dialog_2","_display","_distance_to_friend","_e","_f","_follow_cam","_follow_cam_distance","_foo","_friends","_index","_index_friends","_max_box","_name_player","_nearest_friend","_nearest_teammate_dialog","_no_respawn_points","_Object","_pos","_respawn_button_timer","_show_respawn_time","_target"]; //define variables _Object = _this select 0; _pos = _this select 1; _name_player = name player; _c = 0; _d = 0; _alive_friends = []; _destroy = false; _destroy2 = false; _switch = false; NORRN_FOCUS_CAM_ON = 0; NORRN_REVIVE_CAM_TYPE = 0; NORRN_CAM_NVG = false; Norrn_helper_list = []; all_dead_check = false; _dialog_fade = Norrn_DialogBlink; _oldtarget = objNull; _oldCam = -1; player switchCamera "INTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]; CamDestroy NORRN_REVIVE_cam; _all_dead_dialog = NORRN_revive_array select 1; _nearest_teammate_dialog = NORRN_revive_array select 3; _follow_cam = NORRN_revive_array select 5; _goto_revive = NORRN_revive_array select 9; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _can_be_revived = NORRN_revive_array select 20; _can_be_revived_2 = NORRN_revive_array select 21; _respawn_button_timer = NORRN_revive_array select 25; _distance_to_friend = NORRN_revive_array select 26; _follow_cam_distance = NORRN_revive_array select 32; _max_respawns = NORRN_revive_array select 38; _ally_side_1 = NORRN_revive_array select 42; _ally_side_2 = NORRN_revive_array select 43; _follow_cam_team = NORRN_revive_array select 44; _unc_music = NORRN_revive_array select 46; _mobile_spawn = NORRN_revive_array select 51; _mobile_base_start = NORRN_revive_array select 52; _QG_animation = NORRN_revive_array select 54; _top_view_height = NORRN_revive_array select 55; _all_dead_player = NORRN_revive_array select 56; _all_dead_distance = NORRN_revive_array select 57; _r_dialog_0 = ""; _r_dialog_1 = ""; _r_dialog_2 = ""; _r_dialog_3 = ""; _r_dialog_4 = ""; _r_display = ""; _ally_side_1 = call compile format ["%1", _ally_side_1]; _ally_side_2 = call compile format ["%1", _ally_side_2]; if (_mobile_spawn == 1) then { if(!NORRN_camo_net) then {norrn_button_update = false} else {norrn_button_update = true}; }; _show_respawn_time = time + _respawn_button_timer; showcinemaborder false; //Play song if (_unc_music == 1) then {playMusic "unc_theme"}; NORRN_REVIVE_cam = "camera" CamCreate (getPos _object); NORRN_REVIVE_cam CamSetTarget _object; NORRN_REVIVE_cam CameraEffect ["INTERNAL","Back"]; NORRN_REVIVE_cam CamCommit 0.1; //Check for all dead if (_all_dead_dialog == 1) then { _f = 0; _e = 0; if(_all_dead_player == 0)then { {call compile format ["if(!isNull %1) then {_f = _f + 1}", _x]} forEach NORRN_player_units; {call compile format ["if(!isNull %1 && (%1 getVariable 'NORRN_unconscious') ||!isNull %1 && (_Object distance %1) > _all_dead_distance)then {_e = _e + 1}", _x]}forEach NORRN_player_units; }else{ {call compile format ["if(isplayer %1) then {_f = _f + 1}", _x]} forEach NORRN_player_units; {call compile format ["if(isplayer %1 && (%1 getVariable 'NORRN_unconscious'))then {_e = _e + 1}", _x]}forEach NORRN_player_units; }; if (_e == _f && _d == 0) then {all_dead_check = true}; }; titleText ["", "BLACK FADED", 1]; hint ""; titleText ["You are unconscious and waiting to be revived", "BLACK FADED", 0.5]; sleep 4; waitUntil{!isNull unconscious_body || !(player getVariable "NORRN_unconscious")}; if (!(player getVariable "NORRN_unconscious")) then {_destroy = true}; //setVars for free camera _angh = 0; _angv = 0; if (!_destroy) then { //set view on unconscious body NORRN_REVIVE_cam CamSetTarget unconscious_body; NORRN_REVIVE_cam switchCamera "EXTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]; _NORRN_west = []; {call compile format ["if (!isNull %1) then {_NORRN_west = _NORRN_west + [%1]}", _x]} forEach NORRN_player_units; _foo = []; _foo = _foo + [unconscious_body]; _friends = nearestObjects [unconscious_body, ["AllVehicles"],_follow_cam_distance]; {if (side _x == playerSide && alive _x && animationState _x != r_unc_animation && _x in _NORRN_west && (_x distance NORRN_respawn_mrkr) > 50) then {_foo = _foo + [_x]}}forEach _friends; _alive_friends = _foo; COUNT_CAM_friends = count _alive_friends; _camera_friends = _alive_friends - [unconscious_body]; //create dialog and initialise keyboard; _r_dialog_0 = createDialog "rev_cam_dialog"; _r_display = findDisplay 99123; _r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]; CAM_KEY_pressed = compile preprocessfile "revive_sqf\CAM_KEY_pressed.sqf"; //setVars for free camera _angh = getDir unconscious_body; _angv = 45; sleep 0.5; titlecut ["","BLACK IN",1]; }; while {!_destroy} do { scopeName "FollowCam_01"; //create respawn button _e = 0; _f = 0; if (isNull unconscious_body || !alive unconscious_body) then {_destroy = true;breakOut "FollowCam_01";}; if (!(player getVariable "NORRN_unconscious")) then {_destroy = true; breakOut "FollowCam_01"}; if (mission_Over) then {sleep 5; _destroy = true;breakOut "FollowCam_01";}; if (!alive player) then {titleText ["","BLACK FADED",10];_destroy2 = true;breakOut "FollowCam_01";}; //fix for changing dialogs _cam_angle = lbCurSel 10004; _cam_focus = lbCurSel 10005; if (_all_dead_dialog == 1) then { if(_all_dead_player == 0)then { {call compile format ["if(!isNull %1) then {_f = _f + 1}", _x]} forEach NORRN_player_units; {call compile format ["if(!isNull %1 && (%1 getVariable 'NORRN_unconscious') ||!isNull %1 && (_Object distance %1) > _all_dead_distance)then {_e = _e + 1}", _x]}forEach NORRN_player_units; }else{ {call compile format ["if(isplayer %1) then {_f = _f + 1}", _x]} forEach NORRN_player_units; {call compile format ["if(isplayer %1 && (%1 getVariable 'NORRN_unconscious'))then {_e = _e + 1}", _x]}forEach NORRN_player_units; }; if (_e == _f && !NORRN_r_time_expire) then {all_dead_check = true}; }; //modified for nearest friend dialog bug - now triggers if no players within specified distance can revive downed unit _NORRN_west = []; {call compile format ["if (!isNull %1 && player != %1) then {_NORRN_west = _NORRN_west + [%1]}", _x]} forEach NORRN_player_units; _nearest_friend = 1; {if ((unconscious_body distance _x) <= _distance_to_friend) then {_nearest_friend = _nearest_friend + 1}}forEach _NORRN_west; //Respawn point name for mobile spawn if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _no_respawn_points = NORRN_revive_array select 12; _no_respawn_points = _no_respawn_points - 1; _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; }; }; if (_d == 0 && _dialog_fade != Norrn_DialogBlink && !NORRN_r_time_expire) then { _switch = true; closedialog 0; _r_display closedisplay 10004; _r_display closedisplay 10005; waitUntil {!dialog}; _r_dialog_0 = createDialog "rev_cam_dialog"; _r_display = findDisplay 99123;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]; _dialog_fade = Norrn_DialogBlink; }; if (time >= _show_respawn_time && _d == 0 && !NORRN_r_time_expire || _nearest_teammate_dialog == 1 && _nearest_friend == 1 && _d == 0 && !NORRN_r_time_expire || time >= _show_respawn_time && !NORRN_r_time_expire && _dialog_fade != Norrn_DialogBlink || _nearest_teammate_dialog == 1 && _nearest_friend == 1 && !NORRN_r_time_expire && _dialog_fade != Norrn_DialogBlink) then { _switch = true; closedialog 0; _r_display closedisplay 10004; _r_display closedisplay 10005; waitUntil {!dialog}; _d = 1; if (_no_respawn_points == 0) then {_r_dialog_0 = createDialog "rev_cam_dialog"; _r_display = findDisplay 99123;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 1) then {_r_dialog_1 = createDialog "respawn_button_1";_r_display = findDisplay 99124;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 2) then {_r_dialog_2 = createDialog "respawn_button_2";_r_display = findDisplay 99125;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 3) then {_r_dialog_3 = createDialog "respawn_button_3";_r_display = findDisplay 99126;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 4) then {_r_dialog_4 = createDialog "respawn_button_4";_r_display = findDisplay 99127;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; _dialog_fade = Norrn_DialogBlink; }; if (NORRN_r_time_expire && _d < 2 || _all_dead_dialog == 1 && all_dead_check && _d < 2 && !NORRN_r_time_expire) then { if (_all_dead_dialog == 1 && all_dead_check && _d < 2) then { unconscious_body setVehicleInit "this switchMove 'Deadstate';"; processInitCommands; if (_unconscious_markers == 1) then {deleteMarker format["%1 is down", player]}; titleText ["\n\n\n\n\n\n\n\n\n\nAll players are unconscious. Choose a marker for respawn", "BLACK FADED", 10]; NORRN_r_time_expire = true; }; if (!isNull unconscious_body) then {NORRN_FOCUS_CAM_ON = 0; unconscious_body switchCamera "EXTERNAL"}; sleep 2; closedialog 0; if (_no_respawn_points == 1) then {_dialog_5 = createDialog "respawn_button_1map"}; if (_no_respawn_points == 2) then {_dialog_5 = createDialog "respawn_button_2map"}; if (_no_respawn_points == 3) then {_dialog_5 = createDialog "respawn_button_3map"}; if (_no_respawn_points == 4) then {_dialog_5 = createDialog "respawn_button_4map"}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; _d = 2; }; if (_mobile_spawn == 1 && NORRN_r_time_expire && NORRN_camo_net && !norrn_button_update || _mobile_spawn == 1 && NORRN_r_time_expire && !NORRN_camo_net && norrn_button_update) then { closedialog 0; if (_no_respawn_points == 1) then {_dialog_5 = createDialog "respawn_button_1map"}; if (_no_respawn_points == 2) then {_dialog_5 = createDialog "respawn_button_2map"}; if (_no_respawn_points == 3) then {_dialog_5 = createDialog "respawn_button_3map"}; if (_no_respawn_points == 4) then {_dialog_5 = createDialog "respawn_button_4map"}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; if (!NORRN_camo_net) then {norrn_button_update = false} else {norrn_button_update = true}; NORRN_OK_diag_off = true; }; if (_mobile_spawn == 1 && NORRN_camo_net && _d == 1 && !norrn_button_update && !NORRN_r_time_expire|| _mobile_spawn == 1 && !NORRN_camo_net && _d == 1 && norrn_button_update && !NORRN_r_time_expire)then { _switch = true; closedialog 0; _r_display closedisplay 10004; _r_display closedisplay 10005; waitUntil {!dialog}; if (_no_respawn_points == 0) then {_r_dialog_0 = createDialog "rev_cam_dialog"; _r_display = findDisplay 99123;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 1) then {_r_dialog_1 = createDialog "respawn_button_1";_r_display = findDisplay 99124;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 2) then {_r_dialog_2 = createDialog "respawn_button_2";_r_display = findDisplay 99125;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 3) then {_r_dialog_3 = createDialog "respawn_button_3";_r_display = findDisplay 99126;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 4) then {_r_dialog_4 = createDialog "respawn_button_4";_r_display = findDisplay 99127;_r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; if (!NORRN_camo_net) then {norrn_button_update = false} else {norrn_button_update = true}; }; {if (alive _x) then {if (name _x == "Error: No unit") then {COUNT_CAM_friends = COUNT_CAM_friends - 50}}}forEach _camera_friends; _foo = []; _allUnits = []; _friends = nearestObjects [unconscious_body, ["AllVehicles"], _follow_cam_distance]; _foo = _foo + [unconscious_body]; if (_follow_cam_team == 0) then { {if (side _x == _ally_side_1 && alive _x && animationState _x != r_unc_animation && (_x distance NORRN_respawn_mrkr) > 50 || side _x == _ally_side_2 && alive _x && animationState _x != r_unc_animation && (_x distance NORRN_respawn_mrkr) > 50) then {_foo = _foo + [_x]}}forEach _friends; }else { {if (alive _x && animationState _x != r_unc_animation && (_me distance _x) <= _follow_cam_distance && (_x distance NORRN_respawn_mrkr) > 50) then {_foo = _foo + [_x]}}forEach _NORRN_west; }; if (count _foo != COUNT_CAM_friends) then {_alive_friends = _foo; COUNT_CAM_friends = count _alive_friends}; _camera_friends = _alive_friends - [unconscious_body]; //change camera via dialog lbClear 10004; if (_follow_cam == 1) then { _index = lbAdd[10004, "3rd Person"]; _index = lbAdd[10004, "Top Down"]; _index = lbAdd[10004, "Front Side"]; _index = lbAdd[10004, "1st Person"]; _index = lbAdd[10004, "Follow/Free"]; }else{ _index = lbAdd[10004, "Follow"]; }; //change target via dialog lbClear 10005; _index_friends = lbAdd[10005, _name_player]; if (_follow_cam == 1) then {{if (alive _x) then {_index_friends = lbAdd[10005, name _x]}} forEach _camera_friends;}; //fix for changing dialogs 130209 if (!_switch) then { lbSetCurSel [10004, lbCurSel 10004]; lbSetCurSel [10005, lbCurSel 10005]; }else { lbSetCurSel [10004, _cam_angle]; lbSetCurSel [10005, _cam_focus]; _switch = false; }; NORRN_REVIVE_CAM_TYPE = lbCurSel 10004; NORRN_FOCUS_CAM_ON = lbCurSel 10005; if (_follow_cam == 0 && NORRN_REVIVE_CAM_TYPE == 0) then {unconscious_body switchCamera "EXTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"];}; if (_follow_cam == 1 && !dialog) then {if (!isNull unconscious_body) then {_target = unconscious_body; NORRN_REVIVE_cam camsettarget _target;NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [-3, +1, (_max_box select 2) +1];NORRN_REVIVE_cam camcommit 1};}; if (_follow_cam == 1 && NORRN_REVIVE_CAM_TYPE == 0) then {_target = _alive_friends select NORRN_FOCUS_CAM_ON;if (_target != _oldTarget || NORRN_REVIVE_CAM_TYPE != _oldCam) then {_oldTarget = _target; _oldCam = NORRN_REVIVE_CAM_TYPE; if (_target == player) then {unconscious_body switchCamera "EXTERNAL";} else {_target switchCamera "EXTERNAL"};NORRN_REVIVE_cam CameraEffect ["Terminate","Back"];}}; if (_follow_cam == 1 && NORRN_REVIVE_CAM_TYPE == 1) then {_target = _alive_friends select NORRN_FOCUS_CAM_ON;if (_target == player) then {NORRN_REVIVE_cam camsettarget unconscious_body;} else {NORRN_REVIVE_cam camsettarget _target}; _oldCam = NORRN_REVIVE_CAM_TYPE; NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [0, -2, _top_view_height];NORRN_REVIVE_cam camcommit 0.005}; if (_follow_cam == 1 && NORRN_REVIVE_CAM_TYPE == 2) then {_target = _alive_friends select NORRN_FOCUS_CAM_ON;if (_target == player) then {NORRN_REVIVE_cam camsettarget unconscious_body;} else {NORRN_REVIVE_cam camsettarget _target}; _oldCam = NORRN_REVIVE_CAM_TYPE; NORRN_REVIVE_cam cameraeffect ["internal", "back"];NORRN_REVIVE_cam camsetrelpos [-1.5, 3, 0.2];NORRN_REVIVE_cam camSetFov 1.1; NORRN_REVIVE_cam camcommit 0.005}; if (_follow_cam == 1 && NORRN_REVIVE_CAM_TYPE == 3) then {_target = _alive_friends select NORRN_FOCUS_CAM_ON;if (_target != _oldTarget || NORRN_REVIVE_CAM_TYPE != _oldCam) then {_oldTarget = _target; _oldCam = NORRN_REVIVE_CAM_TYPE; if (_target == player) then {unconscious_body switchCamera "INTERNAL";} else {_target switchCamera "INTERNAL"};NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]}}; _Camera_target = NORRN_FOCUS_CAM_ON; _c = _c + 1; if (_c == 400) then {_c = 0}; //======================================================================================== //Add new dialog information if (dialog && !NORRN_r_time_expire || dialog && _all_dead_dialog == 1 && !all_dead_check && !NORRN_r_time_expire) then { _cam_hint0 = ""; _lives = _max_respawns - (player getVariable "NORRN_lives_used"); _cam_hint0 = format ["Lives remaining: %1", _lives]; ctrlSetText [10, _cam_hint0]; _target = _alive_friends select (lbCurSel 10005); _follow_unit = ""; if (NORRN_FOCUS_CAM_ON == 0) then { _follow_unit = name player; }else { if (alive _target) then {_follow_unit = name _target}; }; _cam_hint1 = format ["Camera following: %1", _follow_unit]; ctrlSetText [11, _cam_hint1]; _unit_distance = round (unconscious_body distance _target); _cam_hint2 = format ["Distance to camera: %1 m", _unit_distance]; ctrlSetText [12, _cam_hint2]; ctrlSetText [13, "The following units have been"]; ctrlSetText [14, "notified that you need help:"]; _cam_hint5 = ""; _list_helper = []; {if (!isNull _x && alive _x) then {_list_helper = _list_helper + [(name _x)]}}forEach Norrn_helper_list; if ((count _list_helper) == 0) then {_cam_hint5 = "None"} else {_cam_hint5 = format ["%1", _list_helper]}; ctrlSetText [15, _cam_hint5]; _cam_hint6 = ""; _rev = objNull; _rev = call compile format ["pr_norrn_dead_%1", player]; if (_goto_revive == 0 && (count Norrn_helper_list) > 0) then {_rev = Norrn_helper_list select 0}; if (_goto_revive == 1 && (count Norrn_helper_list) > 0) then { if (((Norrn_helper_list select 0) distance unconscious_body) < (_rev distance unconscious_body)) then {_rev = (Norrn_helper_list select 0)}; }; if (isNull _rev || !alive _rev) then {_cam_hint6 = "Current reviver: None"} else {_cam_hint6 = format ["Current reviver: %1", name _rev]}; ctrlSetText [16, _cam_hint6]; _cam_hint7 = ""; if (isNull _rev) then {_cam_hint7 = "Distance to reviver: N/A"} else {_cam_hint7 = format ["Distance to reviver: %1 m", round(unconscious_body distance _rev)]}; ctrlSetText [17, _cam_hint7]; _cam_hint8 = ""; if (Norrn_DialogBlink == 20) then {_cam_hint8 = "Dialog Fade: On"} else {_cam_hint8 = "Dialog Fade: Off"}; ctrlSetText [18, _cam_hint8]; _cam_hint9 = ""; if (!NORRN_CAM_NVG) then {_cam_hint9 = "Free camera NVG: Off"} else {_cam_hint9 = "Free camera NVG: On"}; ctrlSetText [19, _cam_hint9]; }; //======================================================================================== // Free cam courtesy of hoz and mandoble see: OFPEC - see: http://www.ofpec.com/forum/index.php?topic=32970.0 if (_follow_cam == 1 && NORRN_REVIVE_CAM_TYPE == 4) then { _target = _alive_friends select NORRN_FOCUS_CAM_ON; _oldCam = NORRN_REVIVE_CAM_TYPE; if (_target == player) then {_target = unconscious_body; NORRN_REVIVE_cam camsettarget _target;} else {NORRN_REVIVE_cam camsettarget _target}; NORRN_REVIVE_cam cameraeffect ["internal", "back"]; if (OFPEC_MouseButtons select 1) then { if (((OFPEC_MouseCoord select 0) >= 0) && ((OFPEC_MouseCoord select 0) <= 1) && ((OFPEC_MouseCoord select 1) >= 0) && ((OFPEC_MouseCoord select 1) <= 1)) then { _deltah = (0.5 - (OFPEC_MouseCoord select 0))*10/0.2; _deltav = (0.5 - (OFPEC_MouseCoord select 1))*10/0.2; _angv = (_angv + _deltav); _angh = (_angh + _deltah); _angv = _angv max 0; _angv = _angv min 89; }; }; _free_pos = [(getpos _target select 0) + sin(_angh)*OFPEC_range_to_unit, (getpos _target select 1) + cos(_angh)*OFPEC_range_to_unit, (getpos _target select 2) + OFPEC_range_to_unit*sin(_angv)]; NORRN_REVIVE_cam camSetPos _free_pos; NORRN_REVIVE_cam camCommit 0.5; }; //======================================================================================== sleep 0.01; }; //destroy camera if (_destroy || _destroy2) exitWith { if (_destroy) then { sleep 0; }; camUseNVG false; closeDialog 4; closeDialog 3; closeDialog 2; closeDialog 1; closeDialog 0; //sleep _cam_black_in; //added for playing music if (_unc_music == 1) then {playMusic ""}; if (mission_Over) then {titletext ["Mission Failed - all players are unconscious","BLACK", 4]; sleep 1}; player switchCamera "INTERNAL"; NORRN_REVIVE_cam CameraEffect ["Terminate","Back"]; CamDestroy NORRN_REVIVE_cam; deleteVehicle _Object; }; //Last edited 07/07/09//CAM_KEY_pressed.sqf start switch ((_this select 1)) do { //N key case 49: { if (!NORRN_CAM_NVG) then { camUseNVG true; NORRN_CAM_NVG = true; }else { camUseNVG false; NORRN_CAM_NVG = false; }; }; //A key case 30: { comment "A = Previous target"; if (NORRN_FOCUS_CAM_ON > 0) then { NORRN_FOCUS_CAM_ON = NORRN_FOCUS_CAM_ON - 1; lbSetCurSel [10005, NORRN_FOCUS_CAM_ON]; }; }; //D key case 32: { comment "D = Next target"; if (NORRN_FOCUS_CAM_ON < COUNT_CAM_friends - 1) then { NORRN_FOCUS_CAM_ON = NORRN_FOCUS_CAM_ON + 1; lbSetCurSel [10005, NORRN_FOCUS_CAM_ON]; }; }; //S key case 31: { "S = Next camera"; if (NORRN_REVIVE_CAM_TYPE < 4) then { NORRN_REVIVE_CAM_TYPE = NORRN_REVIVE_CAM_TYPE + 1; lbSetCurSel [10004, NORRN_REVIVE_CAM_TYPE]; }; }; //W key case 17: { comment "W = Previous camera"; if (NORRN_REVIVE_CAM_TYPE > 0) then { NORRN_REVIVE_CAM_TYPE = NORRN_REVIVE_CAM_TYPE - 1; lbSetCurSel [10004, NORRN_REVIVE_CAM_TYPE]; }; }; //H key case 35: { comment "H = Call for help"; [] call Norrn_Call4Help; }; /* //B key case 48: { comment "B = Disable camera dialog blinking"; if (Norrn_DialogBlink == 20) then { Norrn_DialogBlink = 0; }else{ Norrn_DialogBlink = 20; }; }; */ }; MouseEvents = { _x =0; _y =0; _param = _this select 1; _type = _this select 0; switch (_type) do { case "MouseMoving": { _x = _param select 1; _y = _param select 2; OFPEC_MouseCoord = [_x, _y]; }; case "MouseButtonDown": { _x = _param select 2; _y = _param select 3; _button = _param select 1; OFPEC_MouseButtons set[_button, true]; }; case "MouseButtonUp": { _x = _param select 2; _y = _param select 3; _button = _param select 1; OFPEC_MouseButtons set[_button, false]; }; case "MouseZChanged": { if (((_this select 1) select 1) > 0) then { if (OFPEC_range_to_unit > 2) then { OFPEC_range_to_unit = OFPEC_range_to_unit - OFPEC_camzoomspeed; }; } else { if (OFPEC_range_to_unit < OFPEC_maxzoomout) then { OFPEC_range_to_unit = OFPEC_range_to_unit + OFPEC_camzoomspeed; }; }; }; }; }; /* CARRY BODY SCRIPT Allows players to carry unconscious bodies JUNE 2009 - norrin ***************************************************************************************************************************** Start carry.sqf */ private ["_unit","_dragee","_pos","_dir"]; _dragee = _this select 3; _can_be_revived = NORRN_revive_array select 20; _can_be_revived_2 = NORRN_revive_array select 21; _unit = player; r_carry_sqf = true; r_drag_sqf = false; _unit removeAction Norrn_carryAction; if (isNull _dragee) exitWith {}; _dragee setVariable ["NORRN_unit_dragged", true, true]; detach _dragee; sleep 1.5; _dragee setVehicleInit "this switchMove 'ainjpfalmstpsnonwrfldnon_carried_up'"; _unit setVehicleInit "this switchMove 'acinpknlmstpsraswrfldnon_acinpercmrunsraswrfldnon'"; processInitCommands; sleep 10; //_dragee attachto [_unit,[0.11, 0.05, -0.2]]; _dragee attachto [_unit,[-0.2, 0.2, 0]]; while {r_carry_sqf} do { _anim_name = animationstate _unit; if (!(_dragee getVariable "NORRN_AIunconscious")) exitWith { detach _dragee; _unit setVehicleInit "this switchMove ''"; processInitCommands; player removeAction Norrn_dropAction; r_carry_sqf = false; }; //check that dragged unit still exists if (!alive _unit || _anim_name != "acinpknlmstpsraswrfldnon_acinpercmrunsraswrfldnon" && _anim_name != "acinpercmstpsraswrfldnon" && _anim_name != "acinpercmrunsraswrfldf") exitWith { player removeAction NORRN_dropAction; detach _dragee; _dragee setVehicleInit "this switchMove r_unc_animation"; processInitCommands; r_carry_sqf = false; }; sleep 0.1; }; if (true) exitWith {}; //210609 /* DRAG BODY SCRIPT Allows players to drag unconscious bodies JUNE 2009 - norrin ***************************************************************************************************************************** Start drag.sqf */ private ["_unit","_dragee","_pos","_dir"]; _dragee = _this select 3; _can_be_revived = NORRN_revive_array select 20; _can_be_revived_2 = NORRN_revive_array select 21; _unit = player; //hint format ["%1", _dragee]; if (isNull _dragee) exitWith {}; //player assumes dragging posture _dragee setVariable ["NORRN_unit_dragged", true, true]; _unit playMove "acinpknlmstpsraswrfldnon"; sleep 2; //unconscious unit assumes dragging posture _dragee setVehicleInit "this switchmove 'ainjppnemstpsnonwrfldb_still';"; processInitCommands; //attach unconscious unit _dragee attachto [_unit,[0.1, 1.01, 0]]; sleep 0.02; _dragee setVehicleInit "this setDir 180;"; processInitCommands; r_drag_sqf = true; //Uneccesary actions removed & drop body added player removeAction Norrn_dragAction; player removeAction Norrn_reviveAction; NORRN_dropAction = player addAction ["Drop body", "revive_sqf\drop_body.sqf",_dragee, 0, false, true]; sleep 1; while {r_drag_sqf} do { //_anim_name = animationstate _unit; //if (!alive _dragee || _anim_name != "acinpknlmstpsraswrfldnon" && _anim_name != "acinpknlmwlksraswrfldb" || !(_dragee getVariable "NORRN_unconscious")) exitWith if (!alive _dragee ||!(_dragee getVariable "NORRN_AIunconscious")) exitWith { player removeAction NORRN_dropAction; detach _dragee; _unit setVehicleInit "this switchMove ''"; processInitCommands; sleep 1; r_drag_sqf = false; }; //check that dragged unit still exists if (!alive _unit) exitWith { player removeAction NORRN_dropAction; detach _unit; _unit switchMove ""; sleep 1; r_drag_sqf = false; }; sleep 0.1; }; if (true) exitWith {}; //060609 /* DROP BODY SCRIPT Allows players to drop unconscious bodies JUNE 2009 - norrin ***************************************************************************************************************************** Start drop_body.sqf */ _dragee = _this select 3; player removeAction NORRN_dropAction; NORRN_remove_drag = true; r_drag_sqf = false; _unit = player; detach _unit; detach _dragee; _dragee setVehicleInit "this switchMove r_unc_animation"; _unit setVehicleInit "this switchMove ''"; processInitCommands; NORRN_Dragged_body = objNull; _dragee setVariable ["NORRN_unit_dragged", false, true]; sleep 8; if (true) exitWith {}; //210609/* Go BACK SCRIPT JULY 2008 - norrin (norrins_nook@iprimus.com.au) **************************************************************************** go_back.sqf */ disableserialization; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _mobile_spawn = NORRN_revive_array select 51; if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _no_respawn_points = NORRN_revive_array select 12; _no_respawn_points = _no_respawn_points - 1; _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; }; }; closedialog 0; if (_no_respawn_points == 1) then {_dialog_1 = createDialog "respawn_button_1map"}; if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2map"}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3map"}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4map"}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; if (true) exitWith {};/* HEAL_ACTION SCRIPT Causes the player to execute the medic animation when the revive action is chosen JULY 2009 - norrin *********************************************************************************************************************** begin heal.sqf */ _wounded = _this select 3; _name = player; _QG_animation = NORRN_revive_array select 54; _medpacks = NORRN_revive_array select 80; _reward_function = NORRN_revive_array select 96; _wounded setVariable ["NORRN_unit_dragged", true, true]; if (_QG_animation == 1) then {_wounded playMoveNow "ainjppnemstpsnonwrfldnon"}; sleep 1; if (_QG_animation == 0) then { player playMove "AinvPknlMstpSlayWrflDnon_medic"; } else { _wounded attachTo [player,[0,1.1,0]]; sleep 0.02; _wounded setVehicleInit "this setDir 170;"; processInitCommands; player playMoveNow "ainvpknlmstpsnonwnondr_medic3"; }; if (_medpacks == 1) then { _var = _name getVariable "Norrn_medpacks"; _name setVariable ["Norrn_medpacks", (_var - 1), true]; if (_name == player) then { _med_supplies = format ["Medpacks Remaining: %1\nBandages Remaining: %2", _name getVariable "Norrn_medpacks", _name getVariable "Norrn_bandages"]; hint _med_supplies; }; }; sleep 2; if (_reward_function == 1) then { _var = _name getVariable "NORRN_bonus_life"; _name setVariable ["NORRN_bonus_life", _var + 1, false]; }; if (_QG_animation == 1) then { sleep 9; player playMoveNow "ainvpknlmstpsnonwnondr_medic0"; sleep 9; player playMoveNow "ainvpknlmstpslaywrfldnon_1"; detach _wounded; }; if (true) exitWith {}; //020709// init_related_scripts.sqf ArmA2 revive // JULY 2009 - norrin _mission_end_function = NORRN_revive_array select 0; _max_respawns = NORRN_revive_array select 38; _mobile_spawn = NORRN_revive_array select 51; _no_enemy_sides = NORRN_revive_array select 22; _mobile_man = NORRN_revive_array select 53; _mobile_type = NORRN_revive_array select 60; if (isServer && _mobile_spawn == 1) then {NORRN_camo_net = false; publicVariable "NORRN_camo_net"}; if (_mobile_spawn == 1) then {r_ms_base_1 = _Base_1}; // Add Revive Functions Norrn_AIBehaviour = Compile PreprocessFile "revive_sqf\functions\AIBehaviour.sqf"; Norrn_WaterFix = Compile PreprocessFile "revive_sqf\functions\WaterFix.sqf"; GetTerrainSlope = Compile PreprocessFile "revive_sqf\functions\GetTerrainSlope.sqf"; //Add terrain slope function from Warfare thanks to BIS Norrn_SlopeFix = Compile PreprocessFile "revive_sqf\functions\SlopeFix.sqf"; Norrn_CallOut = Compile PreprocessFile "revive_sqf\functions\CallOut.sqf"; Norrn_UncAnimFix = Compile PreprocessFile "revive_sqf\functions\UncAnimFix.sqf"; Norrn_DeleteUncBody = Compile PreprocessFile "revive_sqf\functions\DeleteUncBody.sqf"; Norrn_LeaderFix = Compile PreprocessFile "revive_sqf\functions\LeaderFix.sqf"; Norrn_LivesRemain = Compile PreprocessFile "revive_sqf\functions\LivesRemain.sqf"; Norrn_RespawnPos1 = Compile PreprocessFile "revive_sqf\functions\RespawnPos1.sqf"; Norrn_RespawnPos2 = Compile PreprocessFile "revive_sqf\functions\RespawnPos2.sqf"; Norrn_RespawnPos2AI = Compile PreprocessFile "revive_sqf\functions\RespawnPos2AI.sqf"; Norrn_Call4Help = Compile PreprocessFile "revive_sqf\functions\I_need_help.sqf"; Norrn_AI_throwSmoke = Compile PreprocessFile "revive_sqf\functions\AI_throwSmoke.sqf"; NORRN_DropWeapons = Compile PreprocessFile "revive_sqf\functions\dropWeapons.sqf"; NORRN_load_wounded = Compile PreprocessFile "revive_sqf\load_wounded\load_wounded.sqf"; NORRN_respawn_chance = Compile PreprocessFile "revive_sqf\functions\respawn_chance.sqf"; NORRN_respawn_time = Compile PreprocessFile "revive_sqf\functions\respawn_time.sqf"; NORRN_UNC_CAM = Compile preprocessfile "revive_sqf\cam_follow.sqf"; Norrn_DialogBlink = 0; //======================================================== // Initialise revive script [] execVM "revive_sqf\revive_init.sqf"; // Initialise isplayer script [NORRN_player_units] execVM "revive_sqf\isplayer.sqf"; if (isServer) then { mission_Over = false; publicVariable "mission_Over"; // Initialise mission end script if (_mission_end_function == 1) then {[NORRN_player_units] execVM "revive_sqf\mission_end.sqf"}; // Initialise marker color script if (_no_enemy_sides > 0) then {[] execVM "revive_sqf\marker_color.sqf"}; // Initialise mobile spawn function if (_mobile_spawn == 1 && _max_respawns != 2000) then { if (_mobile_type == 0) then { [r_mobile_spawn_vcl, 0] execVM "revive_sqf\mobile\move_spawn.sqf" } else { NORRN_mobile_man = ObjNull; [_mobile_man, 1] execVM "revive_sqf\mobile\move_spawn.sqf" }; }; }; //create mobile respawn marker if (_mobile_spawn == 1) then {[] execVM "revive_sqf\mobile\mobile_marker.sqf"}; //initialise mobile spawn script if player is mobile respawn unit if (player == _mobile_man && _max_respawns != 2000) then { [_mobile_man, _mobile_man] execVM "revive_sqf\mobile\mobile_spawn.sqf"; NORRN_mobile_man = player; publicVariable "NORRN_mobile_man"; }; //Camera Options - hoz and mandoble's free cam settings, OFPEC - see: http://www.ofpec.com/forum/index.php?topic=32970.0 OFPEC_MouseCoord = [0.5,0.5]; OFPEC_MouseScroll = 0; OFPEC_MouseButtons =[false,false]; OFPEC_camzoomspeed = 0.25; OFPEC_maxzoomout = 400; OFPEC_range_to_unit = 5; //starting dist from target if (_max_respawns == 2000) then {[]execVm "revive_sqf\respawn\init_respawn.sqf"}; if (true) exitWith {}; //Last edited 01/07/09 /* ISPLAYER SCRIPT Checks to determine whether the unit isplayer and resets unconcious variable and deletes marker if player no longer present JUNE 2009 - norrin ************************************************************************************************************************************ isplayer.sqf */ if (!local player) exitWith {}; _names_units = _this select 0; _revive_array = NORRN_revive_array; _can_be_revived = _revive_array select 20; _can_be_revived_2 = _revive_array select 21; _units = []; sleep 5; {call compile format ["if(!isNull %1) then {_units = _units + [%1]}", _x]} forEach _names_units; while {true} do { {call compile format ["if(%1 in _units) then {}else {_units = _units + [%1]}", _x]}forEach _names_units; //hint format ["%1", _units]; {if (!alive _x && !isNull _x) then { //hint format ["%1", _x]; _mrkr = format ["%1 is down", _x]; _body = call compile format ["norrn_dead_%1", _x]; _units = _units - [_x]; if (animationState _body == "AmovPpneMstpSnonWnonDnon_healed" || animationState _body == "ainjppnemstpsnonwrfldnon") then { if (!isNull _body) then {deleteVehicle _body}; deleteMarker _mrkr; }; };}forEach _units; sleep 1; }; /* MARKER COLOR SCRIPT This script automatically sets the respawn marker color based on enemy occupation of zone OCTOBER 2008 - norrin (norrins_nook@iprimus.com.au) ************************************************************************************************************************************* marker_color.sqf */ _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _no_enemy_sides = NORRN_revive_array select 22; while {true} do { if (_no_enemy_sides == 1 || _no_enemy_sides == 2) then { if (no_base_1) then {_Base_1 setMarkerColor "ColorRed"}; if (!no_base_1) then {_Base_1 setMarkerColor "ColorGreen"}; if (no_base_2) then {_Base_2 setMarkerColor "ColorRed"}; if (!no_base_2) then {_Base_2 setMarkerColor "ColorGreen"}; if (no_base_3) then {_Base_3 setMarkerColor "ColorRed"}; if (!no_base_3) then {_Base_3 setMarkerColor "ColorGreen"}; if (no_base_4) then {_Base_4 setMarkerColor "ColorRed"}; if (!no_base_4) then {_Base_4 setMarkerColor "ColorGreen"}; }; if (_no_enemy_sides == 2) then { if (no_base_1b) then {_Base_1 setMarkerColor "ColorRed"}; if (!no_base_1b) then {_Base_1 setMarkerColor "ColorGreen"}; if (no_base_2b) then {_Base_2 setMarkerColor "ColorRed"}; if (!no_base_2b) then {_Base_2 setMarkerColor "ColorGreen"}; if (no_base_3b) then {_Base_3 setMarkerColor "ColorRed"}; if (!no_base_3b) then {_Base_3 setMarkerColor "ColorGreen"}; if (no_base_4b) then {_Base_4 setMarkerColor "ColorRed"}; if (!no_base_4b) then {_Base_4 setMarkerColor "ColorGreen"}; }; sleep 3; }; if (true) exitWith {};/* MISSION END SCRIPT Ends mission when all units are unconscious JUNE 2009 - norrin ************************************************************************************************************************************ mission_end.sqf */ private ["_units", "_no_conscious"]; _names_units = _this select 0; _no_conscious = 0; sleep 20; while {true} do { _units = []; {call compile format ["_units = _units + [%1]", _x]}forEach _names_units; _no_conscious = 0; {if (isplayer _x && !(_x getVariable "NORRN_unconscious")) then {_no_conscious = 1}}forEach _units; //hint format ["%1", _no_conscious]; if (_no_conscious == 0) exitWith { mission_Over = true; publicVariable "mission_Over"; }; sleep 5; }; if (true) exitWith {}; /* ONCONNECT SCRIPT This script gets the current unit status when a player joins the mission JUNE 2009 - norrin ************************************************************************************************************************************* onConnect.sqf */ _heal_yourself = NORRN_revive_array select 8; if (!isNull player && !alive player) exitWith {titleText ["Unit selected is dead please press escape, return to the unit selection menu and choose the same or another playable unit", "BLACK FADED", 5]}; //Need to keep "respawn" and "Boot_hill" markers at least 100 metres appart if (!isNull player && player distance getMarkerPos "Boot_Hill" < 50) exitWith {titleText ["Unit selected is dead please press escape, return to the unit selection menu and choose the same or another playable unit", "BLACK FADED", 10]}; if (!isNull player && player distance getMarkerPos "respawn_west" < 50 || !isNull player && player distance getMarkerPos "respawn_east" < 50 || !isNull player && player distance getMarkerPos "respawn_guerrila" < 50 || !isNull player && player distance getMarkerPos "respawn_civilian" < 50) exitWith { titleText ["Unit selected is unconscious please press escape, return to the unit selection menu and choose another playable unit", "BLACK FADED", 10] }; //Initialise revive script {if (!isNull (call compile format ["%1", _x])) then {[_x, NORRN_player_units] execVM "revive_sqf\Revive_player.sqf"}}forEach NORRN_player_units; //Initialise heal script for each player if (_heal_yourself == 1 && !isNull player) then {[player] execVM "revive_sqf\heal_sqf\player_heal.sqf"}; sleep 2; if (true) exitWith {}, /* PUT DOWN BODY SCRIPT Allows players to drop unconscious bodies JUNE 2009 - norrin ***************************************************************************************************************************** Start putDown_body.sqf */ _dragee = _this select 3; _unit = player; player removeAction NORRN_putDownAction; //NORRN_remove_drag = true; r_carry_sqf = false; detach _unit; detach _dragee; _dragee setVehicleInit "this switchMove r_unc_animation"; _unit setVehicleInit "this switchMove ''"; processInitCommands; //NORRN_Dragged_body = objNull; sleep 8; if (true) exitWith {}; //010509/* RESPAWN AT BASE SCRIPT JULY 2009 - norrin **************************************************************************** respawn_at_base.sqf */ _spawn_pos = _this select 0; _name = _this select 1; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _max_respawns = NORRN_revive_array select 38; _mobile_spawn = NORRN_revive_array select 51; _mobile_base_start = NORRN_revive_array select 52; _respawnAtBaseWait = NORRN_revive_array select 68; _baseWait = false; _no_base_1 = no_base_1; _no_base_1b = no_base_1b; _no_base_2 = no_base_2; _no_base_2b = no_base_2b; _no_base_3 = no_base_3; _no_base_3b = no_base_3b; _no_base_4 = no_base_4; _no_base_4b = no_base_4b; //Respawn point name for mobile spawn if (_mobile_spawn == 1) then { if (!NORRN_camo_net) then { _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; _no_respawn_points = _no_respawn_points - 1; if (_spawn_pos == 2 and _Base_2 == "") then {_Base_2 = NORRN_revive_array select 14}; if (_spawn_pos == 3 and _Base_3 == "") then {_Base_2 = NORRN_revive_array select 14}; if (_spawn_pos == 4 and _Base_4 == "") then {_Base_2 = NORRN_revive_array select 14}; _no_base_1 = no_base_2; _no_base_1b = no_base_2b; _no_base_2 = no_base_3; _no_base_2b = no_base_3b; _no_base_3 = no_base_4; _no_base_3b = no_base_4b; }; }; if (_spawn_pos == 1 && _Base_1 != "" && !_no_base_1 && !_no_base_1b) then { _pos_spawn = getMarkerPos _Base_1; _name setpos [((_pos_spawn select 0) + round(random 5)),((_pos_spawn select 1) + round(random 5)),0]; _respawn_message = format ["You have respawned at %1", _Base_1]; if (_name == player) then {titletext [_respawn_message, "BLACK FADED", 1]}; _name setVariable ["NORRN_respawn_at_base", true, true]; NORRN_spawn_chosen = true; _baseWait = true; sleep 1; If (NORRNCustomExec3 != "") then {call compile NORRNCustomExec3}; }; if (_spawn_pos == 1 && _Base_1 != "" && _no_base_1 || _spawn_pos == 1 && _Base_1 != "" && _no_base_1b) then { if (NORRN_r_time_expire) then { if (_no_respawn_points == 1) then {_dialog_1 = createDialog "respawn_button_1map";ctrlSetText [1, _Base_1];}; if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.1; titletext ["\n\n\n\n\n\n\n\n\n\n\nThis spawn point is currently occupied by enemy forces \n\nRevive timer has been exceeded. Choose marker for respawn", "BLACK FADED", 10]; }else{ closedialog 0; r_display closedisplay 10004; r_display closedisplay 10005; waitUntil {!dialog}; if (_no_respawn_points == 1) then {r_dialog_1 = createDialog "respawn_button_1";r_display = findDisplay 99124;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 2) then {r_dialog_2 = createDialog "respawn_button_2";r_display = findDisplay 99125;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 3) then {r_dialog_3 = createDialog "respawn_button_3";r_display = findDisplay 99126;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 4) then {r_dialog_4 = createDialog "respawn_button_4";r_display = findDisplay 99127;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; sleep 0.1; titleText ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (NORRNCustomExec4 != "") then {call compile NORRNCustomExec4}; }; if (_spawn_pos == 2 && _Base_2 != "" && !_no_base_2 && !_no_base_2b) then { _pos_spawn = getMarkerPos _Base_2; _name setpos [((_pos_spawn select 0) + round(random 5)),((_pos_spawn select 1) + round(random 5)),0]; _respawn_message = format ["You have respawned at %1", _Base_2]; if (_name == player) then {titleText [_respawn_message, "BLACK FADED", 1]}; _name setVariable ["NORRN_respawn_at_base", true, true]; NORRN_spawn_chosen = true; _baseWait = true; sleep 1; If (NORRNCustomExec3 != "") then {call compile NORRNCustomExec3}; }; if (_spawn_pos == 2 && _Base_2 != "" && _no_base_2 || _spawn_pos == 2 && _Base_2 != "" && _no_base_2b) then { if (NORRN_r_time_expire) then { if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.1; titletext ["\n\n\n\n\n\n\n\n\n\n\nThis spawn point is currently occupied by enemy forces \n\nRevive timer has been exceeded. Choose marker for respawn", "BLACK FADED", 10]; }else{ closedialog 0; r_display closedisplay 10004; r_display closedisplay 10005; waitUntil {!dialog}; if (_no_respawn_points == 2) then {r_dialog_2 = createDialog "respawn_button_2";r_display = findDisplay 99125;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 3) then {r_dialog_3 = createDialog "respawn_button_3";r_display = findDisplay 99126;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points == 4) then {r_dialog_4 = createDialog "respawn_button_4";r_display = findDisplay 99127;r_display displaySetEventHandler ["Keydown", "_this call CAM_KEY_pressed"]}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; sleep 0.1; titleText ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (NORRNCustomExec4 != "") then {call compile NORRNCustomExec4}; }; if (_spawn_pos == 3 && _Base_3 != "" && !_no_base_3 && !_no_base_3b) then { _pos_spawn = getMarkerPos _Base_3; _name setpos [((_pos_spawn select 0) + round(random 5)),((_pos_spawn select 1) + round(random 5)),0]; _respawn_message = format ["You have respawned at %1", _Base_3]; if (_name == player) then {titleText [_respawn_message, "BLACK FADED", 1]}; _name setVariable ["NORRN_respawn_at_base", true, true]; NORRN_spawn_chosen = true; _baseWait = true; sleep 1; If (NORRNCustomExec3 != "") then {call compile NORRNCustomExec3}; }; if (_spawn_pos == 3 && _Base_3 != "" && _no_base_3 || _spawn_pos == 3 && _Base_3 != "" && _no_base_3b) then { if (NORRN_r_time_expire) then { closedialog 0; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.1; titletext ["\n\n\n\n\n\n\n\n\n\n\nThis spawn point is currently occupied by enemy forces \n\nRevive timer has been exceeded. Choose marker for respawn", "BLACK FADED", 10]; }else{ titleText ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (NORRNCustomExec4 != "") then {call compile NORRNCustomExec4}; }; if (_spawn_pos == 4 && _Base_4 != "" && !_no_base_4 && !_no_base_4b) then { _pos_spawn = getMarkerPos _Base_4; _name setpos [((_pos_spawn select 0) + round(random 5)),((_pos_spawn select 1) + round(random 5)),0]; _respawn_message = format ["You have respawned at %1", _Base_4]; if (_name == player) then {titleText [_respawn_message, "BLACK FADED", 1]}; _name setVariable ["NORRN_respawn_at_base", true, true]; NORRN_spawn_chosen = true; _baseWait = true; sleep 1; If (NORRNCustomExec3 != "") then {call compile NORRNCustomExec3}; }; if (_spawn_pos == 4 && _Base_4 != "" && _no_base_4 || _spawn_pos == 4 && _Base_4 != "" && _no_base_4b) then { if (NORRN_r_time_expire) then { closedialog 0; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4map";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.1; titletext ["\n\n\n\n\n\n\n\n\n\n\nThis spawn point is currently occupied by enemy forces \n\nRevive timer has been exceeded. Choose marker for respawn", "BLACK FADED", 10]; }else{ titleText ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (NORRNCustomExec4 != "") then {call compile NORRNCustomExec4}; }; sleep 2; if ((_respawnAtBaseWait select 0) == 1 && _baseWait && _max_respawns != 2000) then { _timer = (_respawnAtBaseWait select 1); _c = 1; _name setCaptive true; while {_timer >= 0} do { if (_c >= 1 ) then { _timer_message = format ["You will respawn in %1 seconds", _timer]; if (_name == player) then {titletext [_timer_message,"BLACK FADED", 0.3]}; _timer = _timer - 1; _c = 0; }; sleep 0.05; _c = _c + 0.05; }; }; _name setCaptive false; if(true) exitWith {};/* RESPAWN AT BASE SCRIPT (JIP) JUNE 2009 - norrin **************************************************************************** respawn_at_base_jip.sqf */ _spawn_pos = _this select 0; _name = _this select 1; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _mobile_spawn = NORRN_revive_array select 51; _no_base_1 = no_base_1; _no_base_1b = no_base_1b; _no_base_2 = no_base_2; _no_base_2b = no_base_2b; _no_base_3 = no_base_3; _no_base_3b = no_base_3b; _no_base_4 = no_base_4; _no_base_4b = no_base_4b; //Respawn point name for mobile spawn if (_mobile_spawn == 1) then { if (!NORRN_camo_net) then { _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; _no_respawn_points = _no_respawn_points - 1; if (_spawn_pos == 2 and _Base_2 == "") then {_Base_2 = NORRN_revive_array select 14}; if (_spawn_pos == 3 and _Base_3 == "") then {_Base_2 = NORRN_revive_array select 14}; if (_spawn_pos == 4 and _Base_4 == "") then {_Base_2 = NORRN_revive_array select 14}; _no_base_1 = no_base_2; _no_base_1b = no_base_2b; _no_base_2 = no_base_3; _no_base_2b = no_base_3b; _no_base_3 = no_base_4; _no_base_3b = no_base_4b; }; }; if (_spawn_pos == 1 && _Base_1 != "" && !_no_base_1 && !_no_base_1b) then { _name setpos getMarkerPos _Base_1; if (local _name && isplayer _name) then {titleText ["You have respawned at position 1", "PLAIN", 0.5]}; }; if (_spawn_pos == 1 && _Base_1 != "" && _no_base_1 || _spawn_pos == 1 && _Base_1 != "" && _no_base_1b) then { if (_no_respawn_points == 1) then {_dialog_1 = createDialog "respawn_button_1b";ctrlSetText [1, _Base_1];}; if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.01; titletext ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (_spawn_pos == 2 && _Base_2 != "" && !_no_base_2 && !_no_base_2b) then { _name setpos getMarkerPos _Base_2; if (local _name && isplayer _name) then {titleText ["You have respawned at position 2", "PLAIN", 0.5]}; }; if (_spawn_pos == 2 && _Base_2 != "" && _no_base_2 || _spawn_pos == 2 && _Base_2 != "" && _no_base_2b) then { if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; sleep 0.01; titletext ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (_spawn_pos == 3 && _Base_3 != "" && !_no_base_3 && !_no_base_3b) then { _name setpos getMarkerPos _Base_3; if (local _name && isplayer _name) then {titleText ["You have respawned at position 3", "PLAIN", 0.5]}; }; if (_spawn_pos == 3 && _Base_3 != "" && _no_base_3 || _spawn_pos == 3 && _Base_3 != "" && _no_base_3b) then { titletext ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if (_spawn_pos == 4 && _Base_4 != "" && !_no_base_4 && !_no_base_4b) then { _name setpos getMarkerPos _Base_4; if (local _name && isplayer _name) then {titleText ["You have respawned at position 4", "PLAIN", 0.5]}; }; if (_spawn_pos == 4 && _Base_4 != "" && _no_base_4 || _spawn_pos == 4 && _Base_4 != "" && _no_base_4b) then { titleText ["This spawn point is currently occupied by enemy forces", "PLAIN", 0.3]; }; if(true) exitWith {};/* RESPAWN AT BASE SCRIPT (WATER) DECEMBER 2007 norrin (norrins_nook@iprimus.com.au) **************************************************************************** respawn_at_base_water.sqf */ _name = _this select 0; titlecut ["","PLAIN",5]; _water = false; _zzzz = 0; sleep 3; while{surfaceIsWater (getPos player)} do { _downed_x = getPos _name select 0; _downed_y = getPos _name select 1; _center_x = getMarkerPos "center" select 0; _center_y = getMarkerPos "center" select 1; while {surfaceIsWater [_downed_x, _downed_y]} do { if (_zzzz == 0) then {titlecut ["Your body is washing ashore please wait","BLACK FADED",5]}; sleep 0.01; if (_downed_x > _center_x) then { _downed_x = _downed_x - 25; sleep 0.01; _name setPos [_downed_x, _downed_y]; sleep 0.01; }; if (_downed_y > _center_y) then { _downed_y = _downed_y - 25; sleep 0.01; _name setPos [_downed_x, _downed_y]; sleep 0.01; }; if (_downed_x < _center_x) then { _downed_x = _downed_x + 25; sleep 0.01; _name setPos [_downed_x, _downed_y]; sleep 0.01; }; if (_downed_y < _center_y) then { _downed_y = _downed_y + 25; sleep 0.01; _name setPos [_downed_x, _downed_y]; sleep 0.01; }; _zzzz = _zzzz + 1; sleep 0.1; }; }; _body = player; player setdamage 1; waitUntil {alive player}; deleteVehicle _body; if(true) exitWith {};/* RESPAWN COUNTER SCRIPT JANUARY 2008 - norrin (norrins_nook@iprimus.com.au) ***************************************************** respawn_counter.sqf */ if(!isServer) exitWith {}; //Initialise variables for respawn counter if (time < 2) then { {call compile format ["%1_revives = 0; publicvariable ""%1_revives""", _x]} forEach NORRN_player_units; {call compile format ["revive_%1 = 0; publicvariable 'revive_%1' ", _x]} forEach NORRN_player_units; {call compile format ["%1_killer = 0; publicVariable '%1_killer'", _x]} forEach NORRN_player_units; };/* REVIVE_INIT SCRIPT JULY 2009 - norrin ****************************************************************************************************************************** Start revive_init.sqf */ _JIP_spawn_dialog = NORRN_revive_array select 2; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _time_b4_JIP_spawn_dialog = NORRN_revive_array select 17; _max_respawns = NORRN_revive_array select 38; _mobile_spawn = NORRN_revive_array select 51; //run script that creates all triggers required for the revive script [] execVM "revive_sqf\trigger_mkr.sqf"; sleep 0.1; //Variables required for onConnect script and triggers no_base_1 = false; no_base_2 = false; no_base_3 = false; no_base_4 = false; no_base_1b = false; no_base_2b = false; no_base_3b = false; no_base_4b = false; if (_max_respawns == 2000) exitWith {}; onConnect = true; PublicVariable "onConnect"; sleep 5; if (!isNull player && _JIP_spawn_dialog == 1 && time > _time_b4_JIP_spawn_dialog && animationState player != "AmovPpneMstpSnonWnonDnon_healed") then { // forceMap true; // if (local player) then {hint "Press escape to close respawn dialog"}; titleText ["Choose spawn point or press escape to close dialog and start at current position","PLAIN", 0.5]; if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _no_respawn_points = NORRN_revive_array select 12; _no_respawn_points = _no_respawn_points - 1; _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; }; }; if (_no_respawn_points == 1) then {_dialog_1 = createDialog "respawn_button_1b";ctrlSetText [1, _Base_1];}; if (_no_respawn_points == 2) then {_dialog_1 = createDialog "respawn_button_2b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];}; if (_no_respawn_points == 3) then {_dialog_1 = createDialog "respawn_button_3b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];}; if (_no_respawn_points == 4) then {_dialog_1 = createDialog "respawn_button_4b";ctrlSetText [1, _Base_1];ctrlSetText [2, _Base_2];ctrlSetText [3, _Base_3];ctrlSetText [4, _Base_4];}; }; if (true) exitWith {};/* AI ENABLED REVIVE SCRIPT Creates playable units that fall unconscious when killed which can then be revived JULY 2009 - norrin ******************************************************************************************************** Start Revive_player.sqf */ private ["_unit","_units","_name","_respawn","_conscious","_group","_leader","_c","_cc","_d","_doMove_time","_respawn_at_base","_dead", "_busy","_revived_position","_unconscious_body","_unc_unit","_revive_array","_unit_type","_r_marker_side","_revive_units","_marker_pos", "_mrkr_ex","_revives","_revives_remain","_max_respawns","_no_revives","_close_array","_unc_array","_mags","_goto_reviver","_close_unc", "_smoke_rounds","_busy","_round","_bloggs_pos","_bloggs_offset","_sav_pos","_sav_dir","_doMove_time","_water","_body","_pos","_dir", "_offset","_weapons","_magazines","_AI_dismount"]; //Define variables _unit = _this select 0; _units = _this select 1; waitUntil{call compile format["!isNull %1",_unit]}; _name = call compile format["%1",_unit]; // Booleans _respawn = false; _conscious = false; _respawn_at_base = false; _dead = false; _revived_position = false; NORRN_load_wounded_action = false; r_drag_sqf = false; r_carry_sqf = false; all_dead_check = false; // Arrays _revive_array = NORRN_revive_array; _my_group = []; _revive_units = []; _base_weps = []; _base_mags = []; _near_Objects = []; // Numbers _c = 0; _cc = 0; _ccc = 0; _cccc = 0; _ccccc = 0; _cccccc = 0; _ccccccc = 0; _d = 0; _dd = 0; _ddd = 0; _doMove_time = 0; _NORRN_random = 0; _bleed_damage = 0; _total_medpacks = 0; _total_bandages = 0; _blackout = 0; _bonus = 0; _respawns = 0; _respawn_chance = 0; // Objects if (_name == player) then {unconscious_body = objNull}; _unconscious_body = objNull; _unc_unit = objNull; _goto_reviver = objNull; _goto_protect = objNull; _near_dragUnit = objNull; _near_loadUnit = objNull; _reviver = objNull; _group = group _name; _unit_type = typeOf _name; _unconscious_markers = _revive_array select 4; _call_out_function = _revive_array select 6; _revive_timer = _revive_array select 7; _goto_revive = _revive_array select 9; _respawn_at_base_addWeapons = _revive_array select 11; _no_respawn_points = _revive_array select 12; _Base_1 = _revive_array select 13; _Base_2 = _revive_array select 14; _Base_3 = _revive_array select 15; _Base_4 = _revive_array select 16; _can_revive = _revive_array select 18; _can_revive_2 = _revive_array select 19; _can_be_revived = _revive_array select 20; _can_be_revived_2 = _revive_array select 21; _medic_1 = _revive_array select 76; _medic_2 = _revive_array select 77; _enemy_side_1 = _revive_array select 23; _enemy_side_2 = _revive_array select 24; _revive_time_limit = _revive_array select 27; _respawn_position = _revive_array select 28; _goto_revive_distance = _revive_array select 33; _respawn_at_base_magazines = _revive_array select 34; _respawn_at_base_weapons = _revive_array select 35; _revive_damage = _revive_array select 37; _max_respawns = _revive_array select 38; _JIP_respawns = _revive_array select 63; _unc_drag = _revive_array select 39; _AI_smoke = _revive_array select 40; _visible_timer = _revive_array select 41; _water_dialog = _revive_array select 45; _enemy_units_1 = _revive_array select 47; _enemy_units_2 = _revive_array select 48; _mobile_spawn = _revive_array select 51; _QG_animation = _revive_array select 54; _load_wounded = _revive_array select 61; _caseVAC = _revive_array select 64; _chance_ofDeath = _revive_array select 66; _medpacks = _revive_array select 80; _bleeding = _revive_array select 82; _medic_medpacks = _revive_array select 83; _unit_medpacks = _revive_array select 84; _medic_bandages = _revive_array select 85; _unit_bandages = _revive_array select 86; _deadSpectator_cam = _revive_array select 92; _drop_weapons = _revive_array select 93; _cadaver = _revive_array select 94; _reward_function = _revive_array select 96; _revives_required = _revive_array select 97; _team_kill_function = _revive_array select 98; _no_team_kills = _revive_array select 99; if (_QG_animation == 1) then { r_unc_animation = "ainjppnemstpsnonwrfldnon"; }else{ r_unc_animation = "AmovPpneMstpSnonWnonDnon_healed"; }; commentsBrian = ["Brian_Im_hit","Brian_Im_bleeding","Brian_Medic","Brian_Bastards","Brian_Shit_Man_down","Brian_Oh_no","Brian_Fuck","Brian_Fuck_it","Brian_Shit","Brian_Need_help","Brian_A_little_help_here"]; // Respawn marker name of unit if (side _name == west) then {_r_marker_side = "respawn_west";}; if (side _name == east) then {_r_marker_side = "respawn_east";}; if (side _name == resistance) then {_r_marker_side = "respawn_guerrila";}; if (side _name == civilian) then {_r_marker_side = "respawn_civilian";}; NORRN_respawn_mrkr = markerPos _r_marker_side; // Create revivable unit array {call compile format ["if (!isNull %1) then {_revive_units = _revive_units + [%1]}", _x]} forEach _units; // Create group array - moved and changed 060509 {if (_x in _revive_units) then {call compile format ["_my_group = _my_group + ['%1']", _x]}}forEach (units _group); _group_leader = call compile format ["'%1'", (leader _group)]; sleep 2; // Added to respawn at base with original mission load-out - 260409 if (_respawn_at_base_addWeapons == 1 && count _respawn_at_base_magazines == 0 && count _respawn_at_base_weapons == 0) then { _base_weps = weapons _name; _base_mags = magazines _name; }; // JIP respawns if ((_JIP_respawns select 0) != 0) then { if (time > (_JIP_respawns select 1)) then { _max_respawns = (_JIP_respawns select 0); }; }; sleep 2; // Set variables if unit local if (local _name) then { // Probably best not to play with the following code unless you know what you are doing // Set current unit status call compile format ["pr_norrn_dead_%1 = objNull; publicVariable 'pr_norrn_dead_%1'", _name]; // Define global variables for each unit if ( format ["%1", (_name getVariable "NORRN_lives_used")] == "") then {_name setVariable ["NORRN_lives_used", 0, true]}; if ( format ["%1", (_name getVariable "NORRN_unconscious")] == "") then {_name setVariable ["NORRN_unconscious", false, true]}; if ( format ["%1", (_name getVariable "NORRN_AIunconscious")] == "") then {_name setVariable ["NORRN_AIunconscious", false, true]}; if ( format ["%1", (_name getVariable "NORRN_bonus_life")] == "") then {_name setVariable ["NORRN_bonus_life", 0, false]}; if ( format ["%1", (_name getVariable "NORRN_teamkill_punish")] == "") then {_name setVariable ["NORRN_teamkill_punish", 0, true]}; if ( format ["%1", (_name getVariable "NORRN_stopBleed")] == "") then {_name setVariable ["NORRN_stopBleed", false, true]}; if ( format ["%1", (_name getVariable "NORRN_bleeding")] == "") then {_name setVariable ["NORRN_bleeding", false, true]}; if ( format ["%1", (_name getVariable "NORRN_bleedDamage")] == "") then {_name setVariable ["NORRN_bleedDamage", 0, true]}; if ( format ["%1", (_name getVariable "NORRN_dead")] == "") then {_name setVariable ["NORRN_dead", false, true]}; _name setVariable ["NORRN_AI_help", false, true]; //Define the number of medpacks _name setVariable ["NORRN_medpacks", _unit_medpacks, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_medpacks", _medic_medpacks, true]}; _total_medpacks = _name getVariable "NORRN_medpacks"; _name setVariable ["NORRN_bandages", _unit_bandages, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_bandages", _medic_bandages, true]}; _total_bandages = _name getVariable "NORRN_bandages"; // Define smoke variable if (_AI_smoke == 1) then {call compile format["NORRN_dead_%1_smoke = false, publicVariable 'NORRN_dead_%1_smoke'", _unit]}; call compile format ["if (%1 getVariable 'NORRN_unconscious') then { _respawn = true; _conscious = false; if (_name == player) then {unconscious_body =_unconscious_body}; _revived_position = true; _body = norrn_dead_%1; _pos = getPos _body; _dir = getDir _body; _offset = _body distance _pos; _weapons = weapons _body; _magazines = magazines _body; _name setVariable ['NORRN_pos_x', (_pos select 0), true]; _name setVariable ['NORRN_pos_y', (_pos select 1), true]; _name setVariable ['NORRN_unc_array', [_dir, _offset, _magazines, _weapons, _revive_damage], true]; };",_unit]; // Get and set existing unconscious markers {call compile format ["if ((%1 getVariable 'NORRN_unconscious') && _unconscious_markers == 1 && isplayer _name) then { if (!isNull norrn_dead_%1) then { _mrker_pos = getPos norrn_dead_%1; _mrkr_ex = ""%1 is down""; createMarkerlocal [_mrkr_ex, _mrker_pos]; _mrkr_ex setMarkerColorlocal ""ColorBlue""; _mrkr_ex setMarkerTypelocal ""Flag1""; _mrkr_ex setMarkerTextlocal ""%2 is down""; _mrkr_ex setMarkerSizelocal [0.4, 0.4]; }; }",_x, name _x];}forEach _revive_units; // Prompt joining player the no revives remaining if (_max_respawns != 1000 && _name == player) then { _revives = _name getVariable "NORRN_lives_used"; _revives_remain = _max_respawns - _revives; _no_revives = format ["Lives remaining: %1 out of %2", _revives_remain, _max_respawns]; if (_name == player) then {hint _no_revives}; }; // Initialise team kill function if (_team_kill_function == 1 && _max_respawns != 1000) then {_name addEventHandler ["killed", {_this execVM "revive_sqf\team_killer.sqf"}];}; // Chance of Death eventhandlers if ((_chance_ofDeath select 0) == 1 || (_chance_ofDeath select 1) == 1) then { _name addEventHandler ["hit", {(_this select 0) setVariable ["NORRN_killer", _this select 1, false]; (_this select 0) setVariable ["NORRN_K_damage",_this select 2, false]}]; //[unit, causedBy, damage] _name addEventHandler ["dammaged", {_this exec "revive_sqf\COD\body_damage.sqf"}]; //[unit, selectionName, damage] _name addeventhandler ["killed", {(_this select 0) setVariable ["NORRN_kh_killer", _this select 1, false]}]; }; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Revive Loop while {true} do { scopeName "Revive_01"; if(!alive _name) then {_respawn = true; _conscious = false;_busy = 0}; _name = call compile format ["%1", _name]; while{!local _name || isnull _name} do { if (!alive _name) then {waitUntil{alive call compile format["%1",_unit]}}; _name = call compile format ["%1", _unit]; if (isnull _name) exitWith {breakOut "Revive_01"}; if (_name getVariable "NORRN_unconscious") then { _respawn = true; _conscious = false; if (!surfaceIsWater getPos _name) then { _revived_position = true; }else{ _revived_position = false; }; }else{ _respawn = false; _conscious = false; _c = 0; _d = 0; _respawn_at_base = false; _revived_position = false; }; sleep 1.5; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Unit alive while {alive _name && !_respawn && !_conscious} do { _name = call compile format ["%1", _name]; _group = group _name; if (!local _name || isnull _name) exitWith {}; //add revive action for when player gets in range of unconcious unit if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 2]) > 1 && _name == player) then { _nearest_unit = (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 2] select 1); if (_name isKindOf _can_revive && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 0 || _name isKindOf _can_revive_2 && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 0 || _name isKindOf _can_revive && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _name isKindOf _can_revive_2 && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _name isKindOf _medic_1 && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _name isKindOf _medic_2 && _c == 0 && (_nearest_unit getVariable "NORRN_AIunconscious") && !r_carry_sqf && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0) then { Norrn_reviveAction = _name addAction ["Revive", "revive_sqf\heal.sqf",_nearest_unit, 0, false, true]; _c = 1; }; if (!(_nearest_unit getVariable "NORRN_AIunconscious") || r_drag_sqf || r_carry_sqf) then { _name removeAction Norrn_reviveAction; _c = 0; sleep 0.1; }; }; if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 2]) == 1 && _c == 1) then { _name removeAction Norrn_reviveAction; _c = 0; }; // Add drag action for when player gets in range of unconcious unit if (_unc_drag == 1 && _name == player) then { if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 3]) > 1) then { _near_dragUnit = (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4] select 1); if (_cc == 0) then { if(_near_dragUnit getVariable "NORRN_AIunconscious" && !r_carry_sqf) then { Norrn_dragAction = _name addAction ["Drag body", "revive_sqf\drag.sqf",_near_dragUnit, 0, false, true]; _cc = 1; }; }; if (_cc == 1 && !(_near_dragUnit getVariable "NORRN_AIunconscious") || r_drag_sqf) then { _name removeAction Norrn_dragAction; _cc = 0; sleep 0.5; }; }; if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 3]) == 1) then { _name removeAction Norrn_dragAction; _cc = 0; }; // Carry on shoulder if (r_drag_sqf && _ccc == 0) then { _near_carryUnit = (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4] select 1); Norrn_carryAction = _name addAction ["Carry body", "revive_sqf\carry.sqf",_near_carryUnit, 0, false, true]; _ccc = 1; }; if (!r_drag_sqf && _ccc ==1) then { _name removeAction Norrn_carryAction; _ccc = 0; }; // Load unconscious unit onto vehicle if (_load_wounded == 1 && r_drag_sqf && count (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) > 0) then { _vcl = (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) select 0; _near_loadUnit = (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4] select 1); if (_dd == 0 && count (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) > 0 && alive _near_loadUnit) then { _action = format ["Load Wounded on %1", (typeOf _vcl)]; NORRN_loadWoundedAction = _name addAction [_action, "revive_sqf\load_wounded\Load_act.sqf",[_name, _vcl, _near_loadUnit], 0, true, true]; _dd = 1; }; }; if (_load_wounded == 1 && !r_drag_sqf || _load_wounded == 1 && _dd == 1 && count (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) == 0 || _load_wounded == 1 && _dd == 1 && NORRN_load_wounded_action || _load_wounded == 1 && _dd == 1 && !alive _near_loadUnit) then { _name removeAction NORRN_loadWoundedAction; NORRN_load_wounded_action = false; _dd = 0; }; // Remove unconscious unit from vehicle if (_load_wounded == 1 && count (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) > 0) then { _vcl = (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) select 0; _crewVcl = []; _crewVcl = crew _vcl; if (count _crewVcl > 0) then { _unconscious_crew = []; {if (_x getVariable "NORRN_AIunconscious") then {_unconscious_crew = _unconscious_crew + [_x]}} forEach _crewVcl; if (count _unconscious_crew > 0 && _ddd == 0) then { _action = format ["Unload Wounded from %1", (typeOf _vcl)]; NORRN_pullOutAction = _name addAction [_action, "revive_sqf\load_wounded\unLoad_act.sqf",[_name, _vcl, _crewVcl], 0, true, true]; _ddd = 1; }; if (count _unconscious_crew == 0 && _ddd == 1) then { _name removeAction NORRN_pullOutAction; _ddd = 0; }; }; }; if (_load_wounded == 1 && _ddd == 1 && count (nearestObjects [_name, ["Car","Tank","Helicopter","Plane"], 5]) == 0) then { _name removeAction NORRN_pullOutAction; _ddd = 0; }; }; // Force AI to heal if they are with 4 metres of an unconscious unit if (_goto_revive == 0 && !isplayer _name && _name isKindOf _can_revive && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 0 || _goto_revive == 0 && !isplayer _name && _name isKindOf _can_revive_2 && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 0 || _goto_revive == 0 && !isplayer _name && _name isKindOf _can_revive && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _goto_revive == 0 && !isplayer _name && _name isKindOf _can_revive_2 && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _goto_revive == 0 && !isplayer _name && _name isKindOf _medic_1 && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 || _goto_revive == 0 && !isplayer _name && _name isKindOf _medic_2 && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0) then { _unc_friend = (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4] select 1); if ((_unc_friend getVariable "NORRN_AIunconscious") && !(_name getVariable "NORRN_unconscious")) then { _name playMove "AinvPknlMstpSlayWrflDnon_medic"; _name setVariable ["NORRN_AI_help", false, true]; if (_medpacks == 1) then { _var = _name getVariable "Norrn_medpacks"; _name setVariable ["Norrn_medpacks", (_var - 1), true]; }; if (_reward_function == 1) then { _var = _name getVariable "NORRN_bonus_life"; _name setVariable ["NORRN_bonus_life", _var + 1, false]; }; }; }; // AI run AI behaviour function if (_goto_revive == 1 && !isplayer _name) then {[_name,_units] call Norrn_AIBehaviour}; //Medic resupply script if (_medpacks == 1) then { if (count (nearestObjects [_name, ["M113Ambul","BMP2Ambul","MASH"], 5]) > 0) then { if (_cccc == 0 && (_name getVariable "NORRN_medpacks") < _total_medpacks || _cccc == 0 && (_name getVariable "Norrn_bandages") < _total_bandages) then { if (_name == player) then { NORRN_medSuppliesAction = _name addAction ["Take medical supplies", "revive_sqf\medic\supplies.sqf","", 0, false, true]; _cccc = 1; } else { _name setVariable ["NORRN_medpacks", _unit_medpacks, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_medpacks", _medic_medpacks, true]}; _name setVariable ["NORRN_bandages", _unit_bandages, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_bandages", _medic_bandages, true]}; }; }; }; if (count (nearestObjects [_name, ["M113Ambul","BMP2Ambul","MASH"], 5]) == 0 && _name == player) then { _name removeAction NORRN_medSuppliesAction; _cccc = 0; NORRN_medic_sup = false; }; }; // Start bleeding if (_bleeding == 1 && (getdammage _name) > 0.4 && !(_name getVariable "NORRN_stopBleed") && !(_name getVariable "NORRN_Bleed")) then {_name setVariable ["NORRN_Bleed", true, true]; _name setVariable ["NORRN_bleedDamage", (getDammage _name), true]; _ccccccc = 0;}; if (_bleeding == 1 && (getdammage _name) > ((_name getVariable "NORRN_bleedDamage") + 0.2) && (_name getVariable "NORRN_stopBleed")) then {_name setVariable ["NORRN_Bleed", true, true]; _name setVariable ["NORRN_bleedDamage", (getDammage _name), true]; _ccccccc = 0;}; if (_bleeding == 1 && getdammage _name <= 0.4) then {_name setVariable ["NORRN_Bleed", false, true]; _name setVariable ["NORRN_stopBleed", false, true]}; if (_bleeding == 1 && _name == player) then { // Add Bandage wound action if ((_name getVariable "NORRN_Bleed") && (_name getVariable "Norrn_bandages") > 0 && _ccccc == 0) then { NORRN_bandageAction = _name addAction ["Bandage wound", "revive_sqf\medic\bandage.sqf",_name, 0, false, true]; _ccccc = _ccccc + 1; }; if (!(_name getVariable "NORRN_Bleed") && _ccccc == 1 || (_name getVariable "Norrn_bandages") == 0 && _ccccc == 1) then { _name removeAction NORRN_bandageAction; _ccccc = 0; }; // Add Bandage teamate action if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 2]) > 1 && (_name getVariable "Norrn_bandages") > 0) then { _bloggs = (nearestObjects [player, [_can_be_revived, _can_be_revived_2], 2] select 1); if (_cccccc == 0 && (_bloggs getVariable "NORRN_Bleed")) then { NORRN_bandageBuddyAction = _name addAction ["Bandage Teamate", "revive_sqf\medic\bandage_teammate.sqf",[_name, _bloggs], 0, false, true]; _cccccc = _cccccc + 1; }; if (!(_bloggs getVariable "NORRN_Bleed")) then { _name removeAction NORRN_bandageBuddyAction; _cccccc = 0; }; }; if (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 2]) == 1 || (_name getVariable "Norrn_bandages") == 0) then { _name removeAction NORRN_bandageBuddyAction; _cccccc = 0; }; }; // Bleeding and blackout if (_bleeding == 1 && (_name getVariable "NORRN_Bleed")) then { if (_ccccccc == 0 && _name == player) then {titleCut ["You are bleeding","PLAIN DOWN", 0.2]}; if (_ccccccc == 10 || _ccccccc == 30 || _ccccccc == 50 || _ccccccc == 70 || _ccccccc == 90) then { if ((getdammage _name) > 0.4 && (getdammage _name) <= 0.7) then {_blackout = random 0.2}; if ((getdammage _name) > 0.7) then {_blackout = random 0.4}; if (_name == player) then { titleText ["", "BLACK", 1]; sleep _blackout; titleText ["", "BLACK IN", 1]; }; }; if (_ccccccc == 100) then { _damage_unit = getdammage _name; _damage_unit = _damage_unit + 0.05; _name setdammage _damage_unit; _ccccccc = -1; }; _ccccccc = _ccccccc + 1; }; // Teamkill function if ((_name getVariable "NORRN_teamkill_punish") == _no_team_kills && _team_kill_function == 1 && _max_respawns != 1000) then { if (NORRNCustomExec2 != "") then {call compile NORRNCustomExec2}; _no_respawns = (_name getVariable "NORRN_lives_used") + 1; _respawns_left = _max_respawns - _no_respawns; _no_left = "You have lost a life for excessive team killing."; if (local _name) then {hint _no_left}; _name setVariable ["NORRN_lives_used", _no_respawns, false]; _name setVariable ["NORRN_teamkill_punish", 0, true]; }; // Revive/reward function if ((_name getVariable "Norrn_bonus_life") >= _revives_required && _reward_function == 1 && _max_respawns != 1000) then { _no_respawns = (_name getVariable "Norrn_lives_used") - 1; _respawns_left = _max_respawns - _no_respawns; if (_name == player) then {hint "You have received a bonus life for teamplay."}; _name setVariable ["Norrn_lives_used", _no_respawns, true]; _name setVariable ["Norrn_bonus_life", 0, true]; _bonus = 0; }; // Prompt the number of revives required for next bonus if (_reward_function == 1 && _max_respawns != 1000 && _bonus != (_name getVariable "Norrn_life_bonus") && _name == player) then { _bonus = _name getVariable "Norrn_life_bonus"; _revives_till_bonus = _revives_required - _bonus; _hint = format ["Revives required for next bonus: %1", _revives_till_bonus]; hint _hint; }; sleep 0.5; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Unit falls unconscious if (_respawn && !_conscious && !_dead) then { scopeName "Revive_02"; _body = _name; _water = false; if (_body == player) then {titleText ["","BLACK FADED",10]}; _body setVariable ["NORRN_stopBleed", false, true]; _body setVariable ["NORRN_Bleed", false, true]; _body setVariable ["NORRN_unconscious", true, true]; _ccccc = 0; //reset the bandage variable // Get body's current position and load-out _pos = getPos _body; _dir = (getDir _body) + 0.1; _offset = _body distance _pos; _weapons = weapons _body; _magazines = magazines _body; if (!_revived_position) then { _body setVariable ["NORRN_pos_x", (_pos select 0), true]; _body setVariable ["NORRN_pos_y", (_pos select 1), true]; _body setVariable ["NORRN_unc_array", [_dir, _offset, _magazines, _weapons, _revive_damage], true]; }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //Chance of death if ((_chance_ofDeath select 0) == 1 || (_chance_ofDeath select 1) == 1) then { _respawns = _respawns + 1; if ((_body getVariable "NORRN_kh_killer") == _body) then { if ((_chance_ofDeath select 0) == 1) then { _respawn_chance = 500; }; }else{ //determine where player hit and chance of survival if ((_chance_ofDeath select 0) == 1) then {_respawn_chance = [_body, _respawns] call Norrn_respawn_Chance;}; if ((_chance_ofDeath select 1) == 1) then {_revive_time_limit = [_body, _respawns] call Norrn_respawn_Time;}; }; if (_respawns == 6) then {_dead = true}; _random_chance = ceil (random 100); if ((_chance_ofDeath select 0) == 1 && _random_chance > _respawn_chance) then {_dead = true}; }; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (!surfaceIsWater getPos _body) then {_body setVehicleInit "this switchMove 'AmovPpneMstpSnonWnonDnon_healed'"; processInitCommands}; // Code added to prevent group leader running code on player leaving server if AI disabled if (format["%1", name _body] == "Error: No unit") exitWith { _respawn = false; _conscious = false; breakout "Revive_01"; }; //remove all actions - poosibly give unconscious units a different variable - will remove some checks if (_body == player) then { _body removeAction Norrn_reviveAction; _name removeAction Norrn_dragAction; _name removeAction NORRN_loadWoundedAction; }; // sickboy's code modified by _xeno if (!isNil "T_Server" && !isNil "T_Client") then { if (!T_Server && T_Client && _body == player) then {disableUserInput true;}; } else { if (_body == player) then {disableUserInput true;}; }; if (_revived_position) then { waitUntil{alive call compile format["%1",_unit]}; _body = call compile format["%1",_unit]; }; // added from ACE revive 290409 _body setVariable ["NORRN_AI_help", false, true]; if (player == _name) then {NORRN_r_time_expire = false}; // If respawn limit has been reached, define unit as dead if (local _name) then {if (_max_respawns <= (_name getVariable "NORRN_lives_used")) then {_dead = true}}; // Vehicle eject fix if (vehicle _body != _body) then {_vcl_pos = getpos vehicle _body; _body setPos [((_vcl_pos select 0)- 5), (_vcl_pos select 1), 0]}; // Anti-water code if (surfaceIsWater getPos _body && !_dead && _offset < 10) then {_body = [_body, _unit] call Norrn_WaterFix}; _pos = [(_body getVariable "NORRN_pos_x"), (_body getVariable "NORRN_pos_y"), 0]; // Anti-slope code _slope = [_pos, 1] call GetTerrainSlope; if (_slope >= 0.78) then {[_pos, _slope] call Norrn_SlopeFix}; if (_body == player) then {enableRadio false}; _respawn = true; _water = false; waitUntil{alive call compile format["%1",_unit]}; _name = call compile format["%1",_unit]; _name setCaptive true; // If player is down start camera - moved code 260409 if (_name == player) then {titlecut [" ","BLACK FADED",1]}; if (_name == player && !_dead) then { _bee = "butterfly" createVehicle [_pos select 0, _pos select 1, (_pos select 2) + 1]; [_bee, _pos] spawn NORRN_UNC_CAM; }; // Create marker at scene of unconscious player - moved 060509 as a fix for ArmA report - WARNING: Function 'name' - So-and-so is dead if (_unconscious_markers == 1 && !surfaceIsWater _pos && !_dead && local _name) then { _mrkr = format["%1 is down", _name]; createMarker [_mrkr, _pos]; _mrkr setMarkerColor "ColorBlue"; _mrkr setMarkerType "Flag1"; _mrkr setMarkerText format["%1 is down", name _name]; _mrkr setMarkerSize [0.4, 0.4]; }; // Give player weapon and mag loadout they had prior to dying removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _magazines; {_name addWeapon _x} forEach _weapons; _name selectWeapon (primaryWeapon _name); if (!alive _body) then {deleteVehicle _body}; deleteVehicle (call compile format ["norrn_dead_%1", _name]); call compile format ["norrn_dead_%1 = objNull", _name]; if (count(_name getVariable "NORRN_unc_array") != 0) then { call compile format ["_unit_type createUnit [[_pos select 0,_pos select 1, _Offset], group server, 'this setcaptive true; this switchMove ''AmovPpneMstpSnonWnonDnon_healed''; this disableAI ''ANIM''; this setdamage 0.0; this setVehicleVarName ''norrn_dead_%1''; norrn_dead_%1 = this; this setDir ((%1 getVariable ''NORRN_unc_array'') select 0); this setPos [(%1 getVariable ''NORRN_pos_x''), (%1 getVariable ''NORRN_pos_y''), (%1 getVariable ''NORRN_unc_array'') select 1]; removeAllWeapons this; {this removeMagazine _x} forEach magazines this; removeAllItems this; {this addMagazine _x;} forEach ((%1 getVariable ''NORRN_unc_array'') select 2); {this addWeapon _x;} forEach ((%1 getVariable ''NORRN_unc_array'') select 3); this addeventhandler [''hit'', {if (!isNull (_this select 0)) then {(_this select 0) setdamage 0;};}]; this addeventhandler [''dammaged'', {if (!isNull (_this select 0)) then {(_this select 0) setdamage 0;};}];']", _name]; }; sleep 2; if (local _name) then {disableUserInput false}; //waitUntil {call compile format ["!isNull norrn_dead_%1", _unit]}; call compile format ["_unconscious_body = norrn_dead_%1", _unit]; if (_name == player) then {unconscious_body = _unconscious_body}; if (_QG_animation == 1) then {_unconscious_body setVehicleInit "this switchMove 'ainjppnemstpsnonwrfldnon_rolltoback'"; processInitCommands}; // Global variables set for the _unconscious_body _unconscious_body setVariable ["NORRN_unconscious", false, true]; _unconscious_body setVariable ["NORRN_AIunconscious", true, true]; _unconscious_body setVariable ["NORRN_AI_help", false, true]; _unconscious_body setVariable ["NORRN_unit_dragged", false, true]; _revived_position = true; // Disable AI _name stop true; if (_name == leader (group _name)) then { {if (currentCommand _x == "") then {_x doMove getPos _x;} }forEach (units group _name); }; _conscious = true; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // While unconscious if (alive _name && _respawn && _conscious && !_respawn_at_base && !_dead) then { _name = call compile format["%1",_unit]; _revive_time = time + _revive_time_limit; sleep 0.01; // Revive timer increment _timer = time + 1; _timer_count = _revive_time_limit; while {_revive_timer == 0 && alive _name && _respawn && _conscious && !_respawn_at_base && !_dead || _revive_timer == 1 && alive _name && _respawn && _conscious && !_respawn_at_base && !_dead && time < _revive_time} do { if(!local _name) exitWith {}; //270409 if (_name getVariable "Norrn_respawn_at_base") then {_respawn_at_base = true}; if (isNull _unconscious_body) exitWith { call compile format ["%1_a = false; publicVariable '%1_a'", _name]; _revived_position = false; _respawn = false; _conscious = false; _c = 0; _d = 0; sleep 0.1; }; // Call-out while unconscious if (_call_out_function == 1 && _d == 0) then {_NORRN_random = [_unconscious_body] call Norrn_CallOut}; _d = _d + 1; if (_d == _NORRN_random) then {_d = 0}; // Loll about timer if (!(_unconscious_body getVariable "NORRN_unit_dragged") && _QG_animation == 1) then { if (_d == 0) then {_unconscious_body playMoveNow "ainjppnemstpsnonwrfldnon_rolltoback"}; if (_d == 22) then {_unconscious_body playMoveNow "ainjppnemstpsnonwrfldnon_rolltofront"}; }; // Revive count-down if(_revive_timer == 1 && _visible_timer == 1 && _name == player) then { if (time > _timer) then { _timer = time + 1; _timer_count = _timer_count - 1; if (!mission_Over && !all_dead_check) then {call compile format ["titleText ['\n\n\n\n\n\n\n\n\n\nRevive Time Remaining: %1', 'PLAIN', 1]", _timer_count]}; }; }; sleep 0.3; // Reviver is within the revive radius and is reviving - unit revived or unconscious unit is taken to a CASEVAC facilty for treatement if (alive _name && _respawn && _conscious && !_respawn_at_base && count (nearestObjects [_unconscious_body, [_can_be_revived, _can_be_revived_2], 2.5]) > 1 || count _caseVAC > 0) then { if (_name getVariable "Norrn_respawn_at_base") then {_respawn_at_base = true}; // Added for CASEvac _caseVAC_check = false; {if (count (nearestObjects [_unconscious_body, [_x], 5]) > 0) then {_caseVAC_check = true}} forEach (_caseVAC select 1); _near_Objects = nearestObjects [_unconscious_body, [_can_revive, _can_revive_2, _medic_1, _medic_2], 4]; _e = 0; {if(_QG_animation == 1 && isplayer _x && animationState _x == "ainvpknlmstpslaywrfldnon_1" || _QG_animation == 1 && !isplayer _x && animationState _x == "AinvPknlMstpSlayWrflDnon_medic" || _QG_animation == 0 && animationState _x == "AinvPknlMstpSlayWrflDnon_medic")then {_e = _e + 1}}forEach _near_Objects; if (_e >= 1 || _caseVAC_check) then { _reviver = objNull; if (_e >= 1) then { _reviver = nearestObjects [_unconscious_body, [_can_be_revived, _can_be_revived_2], 4.5] select 1; if(animationState _reviver != "ainvpknlmstpslaywrfldnon_1" && animationState _reviver != "AinvPknlMstpSlayWrflDnon_medic") then {_reviver = nearestObjects [_unconscious_body, [_can_be_revived, _can_be_revived_2], 4.5] select 2}; if(animationState _reviver != "ainvpknlmstpslaywrfldnon_1" && animationState _reviver != "AinvPknlMstpSlayWrflDnon_medic") then {_reviver = nearestObjects [_unconscious_body, [_can_be_revived, _can_be_revived_2], 4.5] select 3}; // Create var for reviver's name if (local _name) then { _revive_message = format ["%1 has been revived by %2", name _name, name _reviver]; call compile format ["reviver_%1 = '%2';publicVariable 'reviver_%1';", _name, _revive_message]; }; }; if (_caseVAC_check) then {_unconscious_body setVehicleInit "this switchMove r_unc_animation"; processInitCommands;}; // roll unit unconscious onto belly and start the heal animation - if altAnim unc enabled if (_QG_animation == 1) then { _unconscious_body playMoveNow "ainjppnemstpsnonwrfldnon_rolltofront"; _unconscious_body playMove "AmovPpneMstpSnonWnonDnon_healed"; }; // Get body's current position _pos = getPos _unconscious_body; _dir = getDir _unconscious_body; _offset = _unconscious_body distance _pos; // Return player to position where they were shot if (_name == player) then {titletext [" ","BLACK", 3]}; if (!isNull _unconscious_body) then {[_unconscious_body] call Norrn_DeleteUncBody}; _name setdamage _revive_damage; _name setDir _dir; _name setPos [_pos select 0,_pos select 1, _Offset]; _name setVehicleInit "this switchMove 'AmovPpneMstpSnonWnonDnon_healed'"; processInitCommands; clearVehicleInit _name; _name setCaptive false; // User's code if (NORRNCustomExec1 != "") then {call compile NORRNCustomExec1}; // Reset unconscious variable _name setVariable ["NORRN_unconscious", false, true]; // Re-enable AI and radio _name stop false; enableRadio true; if (_unconscious_markers == 1) then {deleteMarker format["%1 is down", _name]}; // Increment respawn counter if (local _name && _max_respawns != 1000) then {[_name, _max_respawns]call Norrn_LivesRemain}; // Prompt reviver's name if (local _name && !isNull _reviver) then { call compile format ["player setVehicleInit 'server globalChat reviver_%1'", _name]; processInitCommands; }; // BLACK IN and revive message if (_name == player) then { if (!isNull _reviver) then { _revived_by = format ["\nYou have been revived by %1", name _reviver]; titletext [_revived_by,"BLACK IN",2]; titleCut ["","PLAIN", 0.1]; } else { titletext ["\nYou have been revived by CASEVAC","BLACK IN",2]; titleCut ["","PLAIN", 0.1]; }; }; // Fix for leader [_group_leader] call Norrn_LeaderFix; _name doMove getPos _name; // Reset variables if (_name == player) then {call compile format ["pr_norrn_dead_%1 = objNull; publicVariable 'pr_norrn_dead_%1'", _name];}; _revived_position = false; _respawn = false; _conscious = false; if (_AI_smoke == 1) then {call compile format["NORRN_dead_%1_smoke = false, publicVariable 'NORRN_dead_%1_smoke'", _unit]}; _c = 0; _d = 0; sleep 0.1; }; }; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Respawn timer elapses if (_revive_timer == 1 && alive _name && _respawn && _conscious && !_respawn_at_base && time >= _revive_time && !_dead) then { _unconscious_body setVariable ["NORRN_unconscious", false, true]; // Unit respawns at mission start if (_respawn_position == 0) then { if (local _name && isplayer _name) then {titleText ["Revive timer has been exceeded. Respawning at base", "PLAIN", 0.3]}; sleep 2; [1, _name] execVM "revive_sqf\respawn_at_base.sqf"; _respawn_at_base = true }; // Unit respawns at closest enemy free base if (_respawn_position == 1) then {_respawn_at_base = [_name, _pos] call Norrn_RespawnPos1}; // Unit respawns at chosen location if player if (_respawn_position == 2 && isplayer _name) then {_respawn_at_base = [_unconscious_body] call Norrn_RespawnPos2}; // Unit respawns closest to leader if not player if (_respawn_position == 2 && !isplayer _name) then {_respawn_at_base = [_name, _pos] call Norrn_RespawnPos2AI}; // Player is dead if timer elapses if (_respawn_position == 3) then {_dead = true}; }; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Respawn at base if (alive _name && _respawn && _conscious && _respawn_at_base && !_dead) then { titleCut["","plain down", 0.1]; if (vehicle _unconscious_body != _unconscious_body) then { unassignVehicle _unconscious_body; sleep 0.05; _unconscious_body action ["EJECT", vehicle _unconscious_body]; sleep 1; }; if (animationState _unconscious_body != "DeadState") then { _unconscious_body setVehicleInit "this switchMove 'DeadState'"; processInitCommands; }; // Get body's current position _pos = getPos _unconscious_body; _offset = _unconscious_body distance _pos; _upos = [_pos select 0, _pos select 1, _Offset]; _name enableAI "ANIM"; _name playmove ","; // Reset unconscious variable _name setVariable ["NORRN_unconscious", false, true]; if (_unconscious_markers == 1) then {deleteMarker format["%1 is down", _name]}; enableRadio true; _name setCaptive false; _name selectweapon primaryweapon _name; // Add respawn at base weapons if this option is being used if (_respawn_at_base_addWeapons == 1) then { // Added code for respawning at base with original mission load-out - 260409 if (count _respawn_at_base_magazines == 0 && count _respawn_at_base_weapons == 0) then { removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _base_mags; {_name addWeapon _x} forEach _base_weps; _name selectweapon primaryweapon _name; } else { removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _respawn_at_base_magazines; {_name addWeapon _x} forEach _respawn_at_base_weapons; _name selectweapon primaryweapon _name; }; }; // Re-enable AI _name stop false; // Kill unconscious body if (!isNull _unconscious_body) then { if (_drop_weapons == 1|| _cadaver == 1) then {[_unconscious_body, _upos] spawn NORRN_DropWeapons}; if (_drop_weapons == 0 && _cadaver == 0) then {[_unconscious_body] spawn Norrn_DeleteUncBody}; }; // Increment respawn counter if (local _name && _max_respawns != 1000) then {[_name, _max_respawns]call Norrn_LivesRemain}; // Fix for leader [_group_leader] call Norrn_LeaderFix; _name doMove getPos _name; // Reset medical supplies if (_medpacks == 1) then { _name setVariable ["NORRN_medpacks", _unit_medpacks, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_medpacks", _medic_medpacks, true]}; }; if (_bleeding == 1) then { _name setVariable ["NORRN_bandages", _unit_bandages, true]; if (_name isKindOf _medic_1 || _name isKindOf _medic_2) then {_name setVariable ["NORRN_bandages", _medic_bandages, true]}; }; // Reset variables if (_name == player) then {call compile format ["pr_norrn_dead_%1 = objNull; publicVariable 'pr_norrn_dead_%1'", _name];}; if (_AI_smoke == 1) then {call compile format["NORRN_dead_%1_smoke = false, publicVariable 'NORRN_dead_%1_smoke'", _unit]}; _name setVariable ["NORRN_respawn_at_base", false, true]; _respawn_at_base = false; _revived_position = false; _respawn = false; _conscious = false; _c = 0; _d = 0; if (player == _name) then {NORRN_r_time_expire = false}; sleep 2; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Dead - all lives expended if (_dead) exitWith { if (local _name) then { [_name] join grpNull; _name setVariable ["NORRN_unconscious", false, true]; _unconscious_body setVariable ["NORRN_AIunconscious", false, true]; _name setVariable ["NORRN_life_bonus", 0, true]; _unconscious_body setDammage 1; _name setVariable ["NORRN_dead", true, true]; if (_name == player && _dead) then { closedialog 0; titleText ["You are dead", "BLACK FADED", 3]; sleep 2; if(_deadSpectator_cam == 1) then { _bee = "butterfly" createVehicle [_pos select 0, _pos select 1, (_pos select 2) + 1]; [_bee, _pos] execVM "revive_sqf\cam_dead.sqf"; sleep 0.1; } else { titleText ["Player is dead. Please press escape, return to the unit selection menu and choose another playable unit", "BLACK FADED", 10]; }; }; _name setPos getMarkerPos "Boot_hill"; _name setCaptive true; }; sleep 5; _dead = false; _respawn = false; _conscious = false; }; sleep 0.1; }; // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if (true) exitWith {}; //Last edited 07/07/09 /* SHOW MAP LOCATION SCRIPT JUNE 2009 - norrin **************************************************************************** show_map_loc.sqf */ private ["_dialog","_display", "_ctrl"]; _base = _this select 0; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _mobile_spawn = NORRN_revive_array select 51; _spawnPos = []; NORRN_OK_diag_off = false; if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _no_respawn_points = NORRN_revive_array select 12; _no_respawn_points = _no_respawn_points - 1; _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; }; }; disableserialization; closeDialog 0; waitUntil {!dialog}; _dialog_1 = createDialog "OK_map"; if (_base == 1) then {_spawnPos = getMarkerPos _Base_1}; if (_base == 2) then {_spawnPos = getMarkerPos _Base_2}; if (_base == 3) then {_spawnPos = getMarkerPos _Base_3}; if (_base == 4) then {_spawnPos = getMarkerPos _Base_4}; _display = findDisplay 202024; _ctrlmap = _display displayctrl 202001; ctrlMapAnimClear _ctrlmap; _start_pos = position unconscious_body; _ctrlmap ctrlmapanimadd [0.0, 1.00, _start_pos]; // show map location _ctrlmap ctrlmapanimadd [0.8, 0.90, _spawnPos]; // show map location _ctrlmap ctrlmapanimadd [0.1, 0.20, _spawnPos]; // zoom map location ctrlmapanimcommit _ctrlmap; NORRN_r_OK = 1; sleep 0.1; waitUntil {NORRN_r_OK == 2||NORRN_r_OK == 3||NORRN_OK_diag_off}; sleep 0.1; if (NORRN_r_OK == 2) exitWith {[_base,player] execVM "revive_sqf\respawn_at_base.sqf";_base = nil;}; if (NORRN_r_OK == 3 || NORRN_OK_diag_off) exitWith {_base = nil;}; /* TEAM KILL PUNISHMENT SCRIPT This script automatically decreases the revive count of players that team kill JUNE 2009 - norrin ************************************************************************************************************************************* team_killer.sqf */ _killed = _this select 0; _killer = _this select 1; _ally_side_1 = NORRN_revive_array select 42; _ally_side_2 = NORRN_revive_array select 43; _ally_side_1 = call compile format ["%1", _ally_side_1]; _ally_side_2 = call compile format ["%1", _ally_side_2]; if (_killer != _killed && side _killer == _ally_side_1 || _killer != _killed && side _killer == _ally_side_2) then { _var = _killer getVariable "NORRN_teamkill_punish"; _killer setVariable ["NORRN_teamkill_punish", (_var + 1), true]; }; if (true) exitWith {};/* TRIGGER MAKING SCRIPT This script automatically creates the triggers required for the revive_player.sqf script OCTOBER 2008 - norrin ************************************************************************************************************************************* trigger_mkr.sqf */ _mission_end_function = NORRN_revive_array select 0; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; _Base_free_respawn = NORRN_revive_array select 36; _no_enemy_sides = NORRN_revive_array select 22; _enemy_side_1 = NORRN_revive_array select 23; _enemy_side_2 = NORRN_revive_array select 24; _mobile_spawn = NORRN_revive_array select 51; _mobile_base_start = NORRN_revive_array select 52; _Base_1_respawn = _Base_free_respawn select 0; _Base_2_respawn = _Base_free_respawn select 1; _Base_3_respawn = _Base_free_respawn select 2; _Base_4_respawn = _Base_free_respawn select 3; if (_mission_end_function == 1) then { _trig_0 = createTrigger["EmptyDetector",getArray(configFile>>"CfgWorlds">>worldName>>"centerPosition")]; _trig_0 setTriggerType "END6"; _trig_0 setTriggerActivation ["LOGIC", "", false]; _trig_0 setTriggerArea [1, 1, 0, false]; _trig_0 setTriggerStatements ["mission_Over", "titleText [""Mission Failed - all players are unconscious"", ""Black Faded"", 1]", ""]; _trig_0 setTriggerTimeout [15, 15, 15, false]; }; _trig_1 = createTrigger["EmptyDetector",getArray(configFile>>"CfgWorlds">>worldName>>"centerPosition")]; _trig_1 setTriggerType "NONE"; _trig_1 setTriggerActivation ["LOGIC", "", true]; _trig_1 setTriggerArea [1, 1, 0, false]; _trig_1 setTriggerStatements ["onConnect", "call{[] execVM ""revive_sqf\onConnect.sqf""}",""]; _trig_2 = createTrigger["EmptyDetector",getArray(configFile>>"CfgWorlds">>worldName>>"centerPosition")]; _trig_2 setTriggerType "NONE"; _trig_2 setTriggerActivation ["LOGIC", "", true]; _trig_2 setTriggerArea [1, 1, 0, false]; _trig_2 setTriggerStatements ["connected", "call{[] execVM ""revive_sqf\connected.sqf""}", ""]; _trig_3 = createTrigger["EmptyDetector",getArray(configFile>>"CfgWorlds">>worldName>>"centerPosition")]; _trig_3 setTriggerType "NONE"; _trig_3 setTriggerActivation ["LOGIC", "", true]; _trig_3 setTriggerArea [1, 1, 0, false]; _trig_3 setTriggerStatements ["onConnect", "call{[] execVM ""revive_sqf\respawn_counter.sqf""}", ""]; if (_no_enemy_sides == 1 || _no_enemy_sides == 2) then { if (_Base_1_respawn == 0 && _mobile_spawn == 0) then { _trig_4 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; _trig_4 setTriggerType "NONE"; _trig_4 setTriggerActivation [_enemy_side_1, "PRESENT", true]; _trig_4 setTriggerArea [50, 50, 0, false]; _trig_4 setTriggerStatements ["this && !no_base_1", "no_base_1 = true;publicvariable ""no_base_1""",""]; _trig_5 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; _trig_5 setTriggerType "NONE"; _trig_5 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; _trig_5 setTriggerArea [50, 50, 0, false]; _trig_5 setTriggerStatements ["this && no_base_1", "no_base_1 = false;publicvariable ""no_base_1""",""]; }; if (_Base_2_respawn == 0) then { _trig_6 = createTrigger["EmptyDetector", getMarkerPos _Base_2]; _trig_6 setTriggerType "NONE"; _trig_6 setTriggerActivation [_enemy_side_1, "PRESENT", true]; _trig_6 setTriggerArea [50, 50, 0, false]; _trig_6 setTriggerStatements ["this && !no_base_2", "no_base_2 = true; publicvariable ""no_base_2""", ""]; _trig_7 = createTrigger["EmptyDetector", getMarkerPos _Base_2]; _trig_7 setTriggerType "NONE"; _trig_7 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; _trig_7 setTriggerArea [50, 50, 0, false]; _trig_7 setTriggerStatements ["this && no_base_2", "no_base_2 = false; publicvariable ""no_base_2""", ""]; }; if (_Base_3_respawn == 0) then { _trig_8 = createTrigger["EmptyDetector", getMarkerPos _Base_3]; _trig_8 setTriggerType "NONE"; _trig_8 setTriggerActivation [_enemy_side_1, "PRESENT", true]; _trig_8 setTriggerArea [50, 50, 0, false]; _trig_8 setTriggerStatements ["this && !no_base_3", "no_base_3 = true; publicvariable ""no_base_3""", ""]; _trig_9 = createTrigger["EmptyDetector", getMarkerPos _Base_3]; _trig_9 setTriggerType "NONE"; _trig_9 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; _trig_9 setTriggerArea [50, 50, 0, false]; _trig_9 setTriggerStatements ["this && no_base_3", "no_base_3 = false; publicvariable ""no_base_3""", ""]; }; if (_Base_4_respawn == 0) then { _trig_10 = createTrigger["EmptyDetector", getMarkerPos _Base_4]; _trig_10 setTriggerType "NONE"; _trig_10 setTriggerActivation [_enemy_side_1, "PRESENT", true]; _trig_10 setTriggerArea [50, 50, 0, false]; _trig_10 setTriggerStatements ["this && !no_base_4", "no_base_4 = true; publicvariable ""no_base_4""", ""]; _trig_11 = createTrigger["EmptyDetector", getMarkerPos _Base_4]; _trig_11 setTriggerType "NONE"; _trig_11 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; _trig_11 setTriggerArea [50, 50, 0, false]; _trig_11 setTriggerStatements ["this && no_base_4", "no_base_4 = false; publicvariable ""no_base_4""", ""]; }; }; If (_no_enemy_sides == 2) then { if (_Base_1_respawn == 0 && _mobile_spawn == 0) then { _trig_12 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; _trig_12 setTriggerType "NONE"; _trig_12 setTriggerActivation [_enemy_side_2, "PRESENT", true]; _trig_12 setTriggerArea [50, 50, 0, false]; _trig_12 setTriggerStatements ["this && !no_base_1b", "no_base_1b = true; publicvariable ""no_base_1b""", ""]; _trig_13 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; _trig_13 setTriggerType "NONE"; _trig_13 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; _trig_13 setTriggerArea [50, 50, 0, false]; _trig_13 setTriggerStatements ["this && no_base_1b", "no_base_1b = false; publicvariable ""no_base_1b""", ""]; }; if (_Base_2_respawn == 0) then { _trig_14 = createTrigger["EmptyDetector", getMarkerPos _Base_2]; _trig_14 setTriggerType "NONE"; _trig_14 setTriggerActivation [_enemy_side_2, "PRESENT", true]; _trig_14 setTriggerArea [50, 50, 0, false]; _trig_14 setTriggerStatements ["this && !no_base_2b", "no_base_2b = true; publicvariable ""no_base_2b""", ""]; _trig_15 = createTrigger["EmptyDetector", getMarkerPos _Base_2]; _trig_15 setTriggerType "NONE"; _trig_15 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; _trig_15 setTriggerArea [50, 50, 0, false]; _trig_15 setTriggerStatements ["this && no_base_2b", "no_base_2b = false; publicvariable ""no_base_2b""", ""]; }; if (_Base_3_respawn == 0) then { _trig_16 = createTrigger["EmptyDetector", getMarkerPos _Base_3]; _trig_16 setTriggerType "NONE"; _trig_16 setTriggerActivation [_enemy_side_2, "PRESENT", true]; _trig_16 setTriggerArea [50, 50, 0, false]; _trig_16 setTriggerStatements ["this && !no_base_3b", "no_base_3b = true; publicvariable ""no_base_3b""", ""]; _trig_17 = createTrigger["EmptyDetector", getMarkerPos _Base_3]; _trig_17 setTriggerType "NONE"; _trig_17 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; _trig_17 setTriggerArea [50, 50, 0, false]; _trig_17 setTriggerStatements ["this && no_base_3b", "no_base_3b = false; publicvariable ""no_base_3b""", ""]; }; if (_Base_4_respawn == 0) then { _trig_18 = createTrigger["EmptyDetector", getMarkerPos _Base_4]; _trig_18 setTriggerType "NONE"; _trig_18 setTriggerActivation [_enemy_side_2, "PRESENT", true]; _trig_18 setTriggerArea [50, 50, 0, false]; _trig_18 setTriggerStatements ["this && !no_base_4b", "no_base_4b = true; publicvariable ""no_base_4b""", ""]; _trig_19 = createTrigger["EmptyDetector", getMarkerPos _Base_4]; _trig_19 setTriggerType "NONE"; _trig_19 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; _trig_19 setTriggerArea [50, 50, 0, false]; _trig_19 setTriggerStatements ["this && no_base_4b", "no_base_4b = false; publicvariable ""no_base_4b""", ""]; }; }; sleep 5; //create mobile spawn triggers if msp deployed if (_Base_1_respawn == 0 && _mobile_spawn == 1 && ((getMarkerPos _Base_1) distance (getMarkerPos _mobile_base_start) > 20)) then { if (_no_enemy_sides == 1 || _no_enemy_sides == 2) then { r_ms_trig_1 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_1 setTriggerType "NONE"; r_ms_trig_1 setTriggerActivation [_enemy_side_1, "PRESENT", true]; r_ms_trig_1 setTriggerArea [50, 50, 0, false]; r_ms_trig_1 setTriggerStatements ["this && !no_base_1", "no_base_1 = true; publicVariable 'no_base_1'",""]; r_ms_trig_2 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_2 setTriggerType "NONE"; r_ms_trig_2 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; r_ms_trig_2 setTriggerArea [50, 50, 0, false]; r_ms_trig_2 setTriggerStatements ["this && no_base_1", "no_base_1 = false; publicVariable 'no_base_1'",""]; }; if (_no_enemy_sides == 2) then { r_ms_trig_3 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_3 setTriggerType "NONE"; r_ms_trig_3 setTriggerActivation [_enemy_side_2, "PRESENT", true]; r_ms_trig_3 setTriggerArea [50, 50, 0, false]; r_ms_trig_3 setTriggerStatements ["this && !no_base_1b", "no_base_1b = true; publicVariable 'no_base_1b'", ""]; r_ms_trig_4 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_4 setTriggerType "NONE"; r_ms_trig_4 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; r_ms_trig_4 setTriggerArea [50, 50, 0, false]; r_ms_trig_4 setTriggerStatements ["this && no_base_1b", "no_base_1b = false; publicVariable 'no_base_1b'", ""]; }; }; if (true) exitWith {}; _unit = _this select 0, _unit setVariable ["NORRN_body_part", _this select 1, false]; if (true)exitWith {};/* CONFIG.CPP Taken and adapted from ArmA Group Link II Plus! script by SNKMAN. ******************************************************************************************************************************** Start config.cpp */ class CfgSounds { sounds[] = { Brian_Im_hit, Brian_Im_bleeding,Brian_Medic,Brian_Bastards,Brian_Shit_Man_down,Brian_Oh_no, Brian_Fuck,Brian_Fuck_it,Brian_Shit,Brian_Need_help,Brian_A_little_help_here }; class Brian_Im_hit { name="Brian_Im_hit"; sound[]={"revive_sqf\sound\UNIV_v05.ogg",0.05,1.0}; titles[]={}; }; class Brian_Im_bleeding { name="Brian_Im_bleeding"; sound[]={"revive_sqf\sound\UNIV_v06.ogg",0.05,1.0}; titles[]={}; }; class Brian_Medic { name="Brian_Medic"; sound[]={"revive_sqf\sound\UNIV_v07.ogg",0.05,1.0}; titles[]={}; }; class Brian_Bastards { name="Brian_Bastards"; sound[]={"revive_sqf\sound\UNIV_v10.ogg",0.05,1.0}; titles[]={}; }; class Brian_Shit_Man_down { name="Brian_Shit_Man_down"; sound[]={"revive_sqf\sound\UNIV_v11.ogg",0.05,1.0}; titles[]={}; }; class Brian_Oh_no { name="Brian_Oh_no"; sound[]={"revive_sqf\sound\UNIV_v18.ogg",0.05,1.0}; titles[]={}; }; class Brian_Fuck { name="Brian_Fuck"; sound[]={"sound\UNIV_v24.ogg",0.05,1.0}; titles[]={}; }; class Brian_Fuck_it { name="Brian_Fuck_it"; sound[]={"revive_sqf\sound\UNIV_v25.ogg",0.05,1.0}; titles[]={}; }; class Brian_Shit { name="Brian_Shit"; sound[]={"revive_sqf\sound\UNIV_v31.ogg",0.05,1.0}; titles[]={}; }; class Brian_Need_help { name="Brian_Need_help"; sound[]={"revive_sqf\sound\UNIV_v50.ogg",0.05,1.0}; titles[]={}; }; class Brian_A_little_help_here { name="Brian_A_little_help_here"; sound[]={"revive_sqf\sound\UNIV_v51.ogg",0.05,1.0}; titles[]={}; }; };/* Dead CAMERA DIALOG JULY 2009 - norrin ********************************************************************************************************************************** dead_cam_dialog.hpp */ class dead_cam_dialog { idd = 99128; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Spectate Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; }; #define CT_STATIC 0 #define CT_BUTTON 1 #define CT_EDIT 2 #define CT_SLIDER 3 #define CT_COMBO 4 #define CT_LISTBOX 5 #define CT_TOOLBOX 6 #define CT_CHECKBOXES 7 #define CT_PROGRESS 8 #define CT_HTML 9 #define CT_STATIC_SKEW 10 #define CT_ACTIVETEXT 11 #define CT_TREE 12 #define CT_STRUCTURED_TEXT 13 #define CT_3DSTATIC 20 #define CT_3DACTIVETEXT 21 #define CT_3DLISTBOX 22 #define CT_3DHTML 23 #define CT_3DSLIDER 24 #define CT_3DEDIT 25 #define CT_OBJECT 80 #define CT_OBJECT_ZOOM 81 #define CT_OBJECT_CONTAINER 82 #define CT_OBJECT_CONT_ANIM 83 #define CT_USER 99 // Static styles #define ST_HPOS 0x0F #define ST_LEFT 0 #define ST_RIGHT 1 #define ST_CENTER 2 #define ST_UP 3 #define ST_DOWN 4 #define ST_VCENTER 5 #define ST_TYPE 0xF0 #define ST_SINGLE 0 #define ST_MULTI 16 #define ST_TITLE_BAR 32 #define ST_PICTURE 48 #define ST_FRAME 64 #define ST_BACKGROUND 80 #define ST_GROUP_BOX 96 #define ST_GROUP_BOX2 112 #define ST_HUD_BACKGROUND 128 #define ST_TILE_PICTURE 144 #define ST_WITH_RECT 160 #define ST_LINE 176 #define ST_SHADOW 256 #define ST_NO_RECT 512 #define ST_TITLE ST_TITLE_BAR + ST_CENTER #define FontHTML "Zeppelin32" #define FontM "Zeppelin32" #define Dlg_ROWS 36 #define Dlg_COLS 90 #define Dlg_CONTROLHGT ((100/Dlg_ROWS)/100) #define Dlg_COLWIDTH ((100/Dlg_COLS)/100) #define Dlg_TEXTHGT_MOD 0.9 #define Dlg_ROWSPACING_MOD 1.3 #define Dlg_ROWHGT (Dlg_CONTROLHGT*Dlg_ROWSPACING_MOD) #define Dlg_TEXTHGT (Dlg_CONTROLHGT*Dlg_TEXTHGT_MOD) class NORRNRscText { access = ReadAndWrite; type = CT_STATIC; idc = -1; style = ST_LEFT; x = 0; y = 0; w = 0; h = 0; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1, 1, 1, 1}; font = FontM; sizeEx = 0.02; text = ""; }; class NORRNRscListBox { type = CT_LISTBOX; style = ST_LEFT; idc = -1; colorSelect[] = {1, 1, 1, 1}; colorSelectBackground[] = {0.2, 0.4, 1, 1}; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0.02, 0.11, 0.27, 0.4}; font = FontM; sizeEx = 0.02; rowHeight = 0.02; offsetX = 0.003; offsetY = 0.003; offsetPressedX = 0.002; offsetPressedY = 0.002; colorFocused[] = {0.02, 0.11, 0.27, 0.4}; colorShadow[] = {0.2, 0.2, 0.2, 0.8}; colorBorder[] = {0.4, 0.4, 0.4, 1}; borderSize = 0.03; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.15, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.15, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.15, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.15, 1}; }; class NORRNRscButton { type = CT_BUTTON; idc = -1; style = ST_CENTER; colorText[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.7}; colorBackground[] = {0.04, 0.22, 054, 0.7}; colorBackgroundActive[] = {0.04, 0.22, 0.54, 0.9}; colorBackgroundDisabled[] = {0.04, 0.22, 0.54, 0.4}; colorFocused[] = {1, 1, 1, 0.4}; colorShadow[] = {0, 1, 0, 0}; colorBorder[] = {0, 1, 0, 0}; font = FontM; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.15, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.15, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.15, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.15, 1}; sizeEx = 0.02; offsetX=0; offsetY=0; offsetPressedX = 0.002; offsetPressedY = 0.002; borderSize=0; default = false; }; class NORRNRscNavButton:NORRNRscButton { w=0.1;h=0.04; x=0.90; sizeEx = 0.022; colorText[] = { 0, 0, 0, 1 }; colorDisabled[] = { 0, 0, 1, 0.7 }; colorBackground[] = { 1, 1, 1, 0.5 }; colorBackgroundDisabled[] = { 1, 1, 1, 0.5 }; colorBackgroundActive[] = { 0.5, 0.5, 0.5, 0.5 }; colorFocused[] = { 0.31, 0.31, 0.31, 0.31 }; colorShadow[] = { 0, 0, 0, 0.5 }; colorBorder[] = { 0.5, 0.5, 0.5, 0.5 }; }; class NORRNRscActiveText { access = ReadAndWrite; type = 11; idc = -1; style = 2; x = 0; y = 0; h = 0; w = 0; font = "TahomaB"; sizeEx = 0.04; color[] = {1, 1, 1, 1}; colorActive[] = {1, 0.5, 0, 1}; soundEnter[] = {"", 0.1, 1}; soundPush[] = {"", 0.1, 1}; soundClick[] = {"", 0.1, 1}; soundEscape[] = {"", 0.1, 1}; text = ""; default = 0; }; class NORRNRscControlsGroup { type = 15; idc = -1; style = 0; x = 0; y = 0; w = 0; h = 0; class VScrollbar { color[] = {1, 1, 1, 1}; width = 0.021; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = false; }; class HScrollbar { color[] = {1, 1, 1, 1}; height = 0.028; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = false; }; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; }; class Controls {}; }; class NORRNRscCombo { idc = -1; type = CT_COMBO; style = ST_LEFT; colorSelect[] = {1, 1, 1, 1 }; colorSelectBackground[] = {0, 0, 0, 1}; colorText[] = {1, 1, 1, 1}; colorScrollbar[] = {0, 0, 0, 1}; colorBackground[] = {0, 0, 0, 1}; colorBorder[] = {0, 0, 0, 1}; colorShadow[] = {0, 0, 0, 1}; soundSelect[] = { "", 0, 1 }; soundExpand[] = { "", 0, 1 }; soundCollapse[] = { "", 0, 1 }; borderSize = 0; font = "TahomaB"; sizeEx = 0.02; rowHeight = 0.025; wholeHeight = 0.3; text = ""; maxHistoryDelay = 0; default = true; x = 0; y = 0; w = 0; h = 0; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = 0; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; }; }; class NORRNmouseHandler : NORRNRscControlsGroup { onMouseMoving = "[""MouseMoving"",_this] call MouseEvents"; onMouseButtonDown = "[""MouseButtonDown"",_this] call MouseEvents"; onMouseButtonUp = "[""MouseButtonUp"",_this] call MouseEvents"; onMouseZChanged = "[""MouseZChanged"",_this] call MouseEvents"; idc = 2501; type = 15; style = 0; x = 0.0; y = 0.0; w = 1.0; h = 1.0; colorBackground[] = {0.2, 0.0, 0.0, 0.0}; class VScrollbar { color[] = {1, 1, 1, 1}; width = 0.021; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = false; }; class HScrollbar { color[] = {1, 1, 1, 1}; height = 0.028; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = false; }; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; }; class Controls {}; }; class NORRNRscPicture { type = CT_STATIC; idc = -1; style = ST_PICTURE; x = 0.1; y = 0.1; w = 0.4; h = 0.2; sizeEx = Dlg_TEXTHGT; colorBackground[] = {0, 0, 0, 0}; colorText[] = {1,1,1, 1}; font = FontM; text = ""; }; class NORRNRscMapControl { access = ReadAndWrite; type = 101; idc = -1; style = 48; colorBackground[] = {1, 1, 1, 1}; colorText[] = {0, 0, 0, 1}; font = "TahomaB"; sizeEx = 0.04; colorSea[] = {0.56, 0.8, 0.98, 0.5}; colorForest[] = {0.6, 0.8, 0.2, 0.5}; colorRocks[] = {0.5, 0.5, 0.5, 0.5}; colorCountlines[] = {0.65, 0.45, 0.27, 0.5}; colorMainCountlines[] = {0.65, 0.45, 0.27, 1}; colorCountlinesWater[] = {0, 0.53, 1, 0.5}; colorMainCountlinesWater[] = {0, 0.53, 1, 1}; colorForestBorder[] = {0.4, 0.8, 0, 1}; colorRocksBorder[] = {0.5, 0.5, 0.5, 1}; colorPowerLines[] = {0, 0, 0, 1}; colorRailWay[] = {0.8, 0.2, 0.3, 1}; colorNames[] = {0, 0, 0, 1}; colorInactive[] = {1, 1, 1, 0.5}; colorLevels[] = {0, 0, 0, 1}; colorOutside[] = {0, 0, 0, 1}; fontLabel = "TahomaB"; sizeExLabel = 0.04; fontGrid = "TahomaB"; sizeExGrid = 0.04; fontUnits = "TahomaB"; sizeExUnits = 0.04; fontNames = "TahomaB"; sizeExNames = 0.04; fontInfo = "TahomaB"; sizeExInfo = 0.04; fontLevel = "TahomaB"; sizeExLevel = 0.04; text = "#(argb,8,8,3)color(1,1,1,1)"; stickX[] = {0.2, {"Gamma", 1, 1.5}}; stickY[] = {0.2, {"Gamma", 1, 1.5}}; ptsPerSquareSea = 6; ptsPerSquareTxt = 8; ptsPerSquareCLn = 8; ptsPerSquareExp = 8; ptsPerSquareCost = 8; ptsPerSquareFor = "4.0f"; ptsPerSquareForEdge = "10.0f"; ptsPerSquareRoad = 2; ptsPerSquareObj = 10; showCountourInterval = "true"; maxSatelliteAlpha = 0; alphAFadeStartScale = 0; alphAFadeEndScale = 0; class Task { icon = "#(argb,8,8,3)color(0,1,0,1)"; color[] = {1, 1, 1, 1}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class CustomMark { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {1, 1, 1, 1}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Legend { x = 0; y = 0; w = 0; h = 0; font = "Zeppelin32"; sizeEx = 0.0151; colorBackground[] = {1, 1, 1, 0.3}; color[] = {0, 0, 0, 1}; }; class ActiveMarker { color[] = {0.3, 0.1, 0.9, 1}; size = 50; }; class Bunker { icon = "\ca\ui\data\map_bunker_ca.paa"; color[] = {1, 1, 1, 1}; size = 14; importance = 1.5 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class Bush { icon = "\ca\ui\data\map_bush_ca.paa"; color[] = {0, 0.3, 0, 1}; size = 14; importance = 0.2 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class BusStop { icon = "\ca\ui\data\map_busstop_ca.paa"; color[] = {1, 1, 1, 1}; size = 10; importance = 1 * 10 * 0.05; coefMin = 0.25; coefMax = 4; }; class Command { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {1, 1, 1, 1}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Cross { icon = "\ca\ui\data\map_cross_ca.paa"; color[] = {1, 1, 1, 1}; size = 16; importance = 0.7 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fortress { icon = "\ca\ui\data\map_bunker_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fuelstation { icon = "\ca\ui\data\map_fuelstation_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.75; coefMax = 4; }; class Fountain { icon = "\ca\ui\data\map_fountain_ca.paa"; color[] = {0, 0, 0, 1}; size = 12; importance = 1 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Hospital { icon = "\ca\ui\data\map_hospital_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Chapel { icon = "\ca\ui\data\map_chapel_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 1 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Church { icon = "\ca\ui\data\map_church_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Lighthouse { icon = "\ca\ui\data\map_lighthouse_ca.paa"; color[] = {0, 0, 0, 1}; size = 20; importance = 3 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Quay { icon = "\ca\ui\data\map_quay_ca.paa"; color[] = {0, 0, 0, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Rock { icon = "\ca\ui\data\map_rock_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 12; importance = 0.5 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Ruin { icon = "\ca\ui\data\map_ruin_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 16; importance = 1.2 * 16 * 0.05; coefMin = 1; coefMax = 4; }; class SmallTree { icon = "\ca\ui\data\map_smalltree_ca.paa"; color[] = {0.55, 0.64, 0.43, 1}; size = 12; importance = 0.6 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Stack { icon = "\ca\ui\data\map_stack_ca.paa"; color[] = {0, 0, 0, 1}; size = 20; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Tree { icon = "\ca\ui\data\map_tree_ca.paa"; color[] = {0.55, 0.64, 0.43, 1}; size = 12; importance = 0.9 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Tourism { icon = "\ca\ui\data\map_tourism_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 16; importance = 1 * 16 * 0.05; coefMin = 0.7; coefMax = 4; }; class Transmitter { icon = "\ca\ui\data\map_transmitter_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 20; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class ViewTower { icon = "\ca\ui\data\map_viewtower_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 16; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Watertower { icon = "\ca\ui\data\map_watertower_ca.paa"; color[] = {0, 0.35, 0.7, 1}; size = 32; importance = 1.2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Waypoint { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0, 0, 0, 1}; size = 32; importance = 1.2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class WaypointCompleted { icon = "\ca\ui\data\map_waypoint_completed_ca.paa"; color[] = {0, 0, 0, 1}; size = 32; importance = 1.2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; }; /* CHOOSE MAP SPAWN DIALOG JULY 2008 - norrin ********************************************************************************************************************************** OK_map.hpp */ class OK_map { idd = 202024; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {TOP_BORDER, TITLE_DIALOG,r_CHOICE,SPWN_RespawnMap,Respawn_1, Respawn_2}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = FontM; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = FontM; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "You are dead!"; default = true; }; class r_CHOICE { idc = -1; type = CT_STATIC; style = ST_LEFT; x = 0.84; y = 0.52; w = 0.3; h = 0.2; font = FontM; sizeEx = 0.025; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,0}; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Choose this respawn point?"; default = true; }; class SPWN_RespawnMap: NORRNRscMapControl { idc = 202001; x = 0.01; y = 0.1; w = 0.7; h = 0.7; }; class Respawn_1 : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = " OK "; action = "NORRN_r_OK = 2"; }; class Respawn_2 : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = " GO BACK"; action = "NORRN_r_OK = 3; [] execVM ""revive_sqf\Go_back.sqf"""; }; };/* RESPAWN AT BASE DIALOG - Single button JULY 2009 - norrin ***************************************************************************************************************************** respawn_button_1.hpp */ class Respawn_button_1 { idd = 99124; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select,Help_1, HINT_BOX0,HINT_BOX1,HINT_BOX2,HINT_BOX3,HINT_BOX4,HINT_BOX5,HINT_BOX6,HINT_BOX7,HINT_BOX8,HINT_BOX9,Respawn_1}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Unconscious Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; class Help_1 : NORRNRscNavButton { x = 0.02; y = 0.10; w = 0.11; h = 0.04; idc = 5; colorBackground[] = { 1, 1, 1, 0.5 }; text = "Call for Help"; action = "[] call Norrn_Call4Help"; }; class HINT_BOX0 : NORRNRscText { idc = 10; x = 0.02; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX1 : NORRNRscText { idc = 11; x = 0.02; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX2 : NORRNRscText{ idc = 12; x = 0.02; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX3 : NORRNRscText { idc = 13; x = 0.56; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX4 : NORRNRscText{ idc = 14; x = 0.56; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX5 : NORRNRscText { idc = 15; x = 0.56; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX6 : NORRNRscText{ idc = 16; x = 0.30; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX7 : NORRNRscText { idc = 17; x = 0.30; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX8 : NORRNRscText{ idc = 18; x = 0.30; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX9 : NORRNRscText { idc = 19; x = 0.30; y = 0.93; w = 0.4; h = 0.1; }; class Respawn_1 : NORRNRscNavButton { x = 0.85; y = 0.80; w = 0.11; h = 0.04; idc = 1; text = "RESPAWN 1"; action = "titletext ['','BLACK FADED', 1]; [1,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; };/* RESPAWN AT BASE DIALOG - Single button JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_1.hpp */ class Respawn_button_1b { idd = -1; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {Respawn_1b}; class Respawn_1b : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1, player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; };/* RESPAWN AT BASE DIALOG JULY 2007 - norrin ********************************************************************************************************************************** respawn_button_1c.hpp */ class Respawn_button_1c { idd = -1; movingEnable = true; controlsBackground[] = {}; objects[] = { }; controls[] = {Respawn_1b}; class Respawn_1b : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "Wash Ashore"; action = "[player] execVM ""revive_sqf\respawn_at_base_water.sqf"""; }; };/* RESPAWN AT BASE DIALOG - Single button JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_1map.hpp */ class Respawn_button_1map { idd = -1; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {TOP_BORDER, TITLE_DIALOG,SPWN_RespawnMap,Respawn_1}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = FontM; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = FontM; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "You are dead!"; default = true; }; class SPWN_RespawnMap: NORRNRscMapControl { idc = -1; x = 0.01; y = 0.1; w = 0.7; h = 0.7; }; class Respawn_1 : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; };/* RESPAWN AT BASE DIALOG - 2 Buttons JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_2.hpp */ class Respawn_button_2 { idd = 99125; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select,Help_1, HINT_BOX0,HINT_BOX1,HINT_BOX2,HINT_BOX3,HINT_BOX4,HINT_BOX5,HINT_BOX6,HINT_BOX7,HINT_BOX8,HINT_BOX9,Respawn_1,Respawn_2}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Unconscious Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; class Help_1 : NORRNRscNavButton { x = 0.02; y = 0.10; w = 0.11; h = 0.04; idc = 5; colorBackground[] = { 1, 1, 1, 0.5 }; text = "Call for Help"; action = "[] call Norrn_Call4Help"; }; class HINT_BOX0 : NORRNRscText { idc = 10; x = 0.02; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX1 : NORRNRscText { idc = 11; x = 0.02; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX2 : NORRNRscText{ idc = 12; x = 0.02; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX3 : NORRNRscText { idc = 13; x = 0.56; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX4 : NORRNRscText{ idc = 14; x = 0.56; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX5 : NORRNRscText { idc = 15; x = 0.56; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX6 : NORRNRscText{ idc = 16; x = 0.30; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX7 : NORRNRscText { idc = 17; x = 0.30; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX8 : NORRNRscText{ idc = 18; x = 0.30; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX9 : NORRNRscText { idc = 19; x = 0.30; y = 0.93; w = 0.4; h = 0.1; }; class Respawn_1 : NORRNRscNavButton { x = 0.85; y = 0.75; w = 0.11; h = 0.04; idc = 1; text = "RESPAWN 1"; action = "titletext ['','BLACK FADED', 1]; [1,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_2 : NORRNRscNavButton { x = 0.85; y = 0.80; w = 0.11; h = 0.04; idc = 2; text = "RESPAWN 2"; action = "titletext ['','BLACK FADED', 1]; [2,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; }; /* RESPAWN AT BASE DIALOG - 2 Buttons JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_2.hpp */ class Respawn_button_2b { idd = -1; movingEnable = true; controlsBackground[] = {}; objects[] = { }; controls[] = {Respawn_1b, Respawn_2b}; class Respawn_1b : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.75; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_2b : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2, player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; };/* RESPAWN AT BASE DIALOG - 2 Buttons This script adds a button when the follow_camera activates that allows the player to respawn at base JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_2map.hpp */ class Respawn_button_2map { idd = -1; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {TOP_BORDER, TITLE_DIALOG,SPWN_RespawnMap,Respawn_1, Respawn_2}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = FontM; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = FontM; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "You are dead!"; default = true; }; class SPWN_RespawnMap: NORRNRscMapControl { idc = -1; x = 0.01; y = 0.1; w = 0.7; h = 0.7; }; class Respawn_1 : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_2 : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; };/* RESPAWN AT BASE DIALOG - 3 Buttons JULY 2009 - norrin ***************************************************************************************************************************** respawn_button_3.hpp */ class Respawn_button_3 { idd = 99126; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select,Help_1, HINT_BOX0,HINT_BOX1,HINT_BOX2,HINT_BOX3,HINT_BOX4,HINT_BOX5,HINT_BOX6,HINT_BOX7,HINT_BOX8,HINT_BOX9,Respawn_1,Respawn_2,Respawn_3}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Unconscious Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; class Help_1 : NORRNRscNavButton { x = 0.02; y = 0.10; w = 0.11; h = 0.04; idc = 5; colorBackground[] = { 1, 1, 1, 0.5 }; text = "Call for Help"; action = "[] call Norrn_Call4Help"; }; class HINT_BOX0 : NORRNRscText { idc = 10; x = 0.02; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX1 : NORRNRscText { idc = 11; x = 0.02; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX2 : NORRNRscText{ idc = 12; x = 0.02; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX3 : NORRNRscText { idc = 13; x = 0.56; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX4 : NORRNRscText{ idc = 14; x = 0.56; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX5 : NORRNRscText { idc = 15; x = 0.56; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX6 : NORRNRscText{ idc = 16; x = 0.30; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX7 : NORRNRscText { idc = 17; x = 0.30; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX8 : NORRNRscText{ idc = 18; x = 0.30; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX9 : NORRNRscText { idc = 19; x = 0.30; y = 0.93; w = 0.4; h = 0.1; }; class Respawn_1 : NORRNRscNavButton { x = 0.85; y = 0.7; w = 0.11; h = 0.04; idc = 1; text = "RESPAWN 1"; action = "titletext ['','BLACK FADED', 1]; [1,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_2 : NORRNRscNavButton { x = 0.85; y = 0.75; w = 0.11; h = 0.04; idc = 2; text = "RESPAWN 2"; action = "titletext ['','BLACK FADED', 1]; [2,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_3 : NORRNRscNavButton { x = 0.85; y = 0.8; w = 0.11; h = 0.04; idc = 3; text = "RESPAWN 3"; action = "titletext ['','BLACK FADED', 1]; [3,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; }; /* RESPAWN AT BASE DIALOG - 3 buttons JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_3.hpp */ class Respawn_button_3b { idd = -1; movingEnable = true; controlsBackground[] = {}; objects[] = { }; controls[] = {Respawn_1b, Respawn_2b, Respawn_3b}; class Respawn_1b : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_2b : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.75; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_3b : NORRNRscNavButton { idc = 3; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "RESPAWN 3"; action = "[3,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; };/* RESPAWN AT BASE DIALOG JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_3map.hpp */ class Respawn_button_3map { idd = -1; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {TOP_BORDER, TITLE_DIALOG,SPWN_RespawnMap,Respawn_1, Respawn_2, Respawn_3}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = FontM; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = FontM; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "You are dead!"; default = true; }; class SPWN_RespawnMap: NORRNRscMapControl { idc = -1; x = 0.01; y = 0.1; w = 0.7; h = 0.7; }; class Respawn_1 : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_2 : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_3 : NORRNRscNavButton { idc = 3; x = 0.85; y = 0.75; w = 0.11; h = 0.04; text = "RESPAWN 3"; action = "[3,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; };/* RESPAWN AT BASE DIALOG - 4 buttons JULY 2009 - norrin ***************************************************************************************************************************** respawn_button_4.hpp */ class Respawn_button_4 { idd = 99127; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select,Help_1, HINT_BOX0,HINT_BOX1,HINT_BOX2,HINT_BOX3,HINT_BOX4,HINT_BOX5,HINT_BOX6,HINT_BOX7,HINT_BOX8,HINT_BOX9,Respawn_1,Respawn_2,Respawn_3,Respawn_4}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Unconscious Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; class Help_1 : NORRNRscNavButton { x = 0.02; y = 0.10; w = 0.11; h = 0.04; idc = 5; colorBackground[] = { 1, 1, 1, 0.5 }; text = "Call for Help"; action = "[] call Norrn_Call4Help"; }; class HINT_BOX0 : NORRNRscText { idc = 10; x = 0.02; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX1 : NORRNRscText { idc = 11; x = 0.02; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX2 : NORRNRscText{ idc = 12; x = 0.02; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX3 : NORRNRscText { idc = 13; x = 0.56; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX4 : NORRNRscText{ idc = 14; x = 0.56; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX5 : NORRNRscText { idc = 15; x = 0.56; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX6 : NORRNRscText{ idc = 16; x = 0.30; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX7 : NORRNRscText { idc = 17; x = 0.30; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX8 : NORRNRscText{ idc = 18; x = 0.30; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX9 : NORRNRscText { idc = 19; x = 0.30; y = 0.93; w = 0.4; h = 0.1; }; class Respawn_1 : NORRNRscNavButton { x = 0.85; y = 0.65; w = 0.11; h = 0.04; idc = 1; text = "RESPAWN 1"; action = "titletext ['','BLACK FADED', 1]; [1,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_2 : NORRNRscNavButton { x = 0.85; y = 0.70; w = 0.11; h = 0.04; idc = 2; text = "RESPAWN 2"; action = "titletext ['','BLACK FADED', 1]; [2,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_3 : NORRNRscNavButton { x = 0.85; y = 0.75; w = 0.11; h = 0.04; idc = 3; text = "RESPAWN 3"; action = "titletext ['','BLACK FADED', 1]; [3,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; class Respawn_4 : NORRNRscNavButton { x = 0.85; y = 0.80; w = 0.11; h = 0.04; idc = 4; text = "RESPAWN 4"; action = "titletext ['','BLACK FADED', 1]; [4,player] execVM ""revive_sqf\respawn_at_base.sqf"""; }; };/* RESPAWN AT BASE DIALOG - 4 Buttons JULY 2007 - norrin ********************************************************************************************************************************** respawn_button_4.hpp */ class Respawn_button_4b { idd = -1; movingEnable = true; controlsBackground[] = {}; objects[] = { }; controls[] = {Respawn_1b, Respawn_2b, Respawn_3b, Respawn_4b}; class Respawn_1b : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_2b : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_3b : NORRNRscNavButton { idc = 3; x = 0.85; y = 0.75; w = 0.11; h = 0.04; text = "RESPAWN 3"; action = "[3,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; class Respawn_4b : NORRNRscNavButton { idc = 4; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "RESPAWN 4"; action = "[4,player] execVM ""revive_sqf\respawn_at_base_jip.sqf"""; }; };/* RESPAWN AT BASE DIALOG JULY 2009 - norrin ********************************************************************************************************************************** respawn_button_4map.hpp */ class Respawn_button_4map { idd = -1; movingEnable = false; controlsBackground[] = {}; objects[] = { }; controls[] = {TOP_BORDER, TITLE_DIALOG,SPWN_RespawnMap,Respawn_1, Respawn_2, Respawn_3, Respawn_4}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = FontM; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = FontM; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "You are dead!"; default = true; }; class SPWN_RespawnMap: NORRNRscMapControl { idc = -1; x = 0.01; y = 0.1; w = 0.7; h = 0.7; }; class Respawn_1 : NORRNRscNavButton { idc = 1; x = 0.85; y = 0.65; w = 0.11; h = 0.04; text = "RESPAWN 1"; action = "[1,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_2 : NORRNRscNavButton { idc = 2; x = 0.85; y = 0.7; w = 0.11; h = 0.04; text = "RESPAWN 2"; action = "[2,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_3 : NORRNRscNavButton { idc = 3; x = 0.85; y = 0.75; w = 0.11; h = 0.04; text = "RESPAWN 3"; action = "[3,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; class Respawn_4 : NORRNRscNavButton { idc = 4; x = 0.85; y = 0.8; w = 0.11; h = 0.04; text = "RESPAWN 4"; action = "[4,player] execVM ""revive_sqf\show_map_loc.sqf"""; }; };/* REVIVE CAMERA DIALOG JULY 2009 - norrin ********************************************************************************************************************************** rev_cam_dialog.hpp */ class rev_cam_dialog { idd = 99123; movingEnable = false; objects[] = {}; controls[] = {mouse,TOP_BORDER,BOTTOM_BORDER,TITLE_DIALOG,PRESS_HELP,HELP_DIALOG,CAM_LIST,CAM_select,FRIEND_LIST,FRIEND_select,Help_1, HINT_BOX0,HINT_BOX1,HINT_BOX2,HINT_BOX3,HINT_BOX4,HINT_BOX5,HINT_BOX6,HINT_BOX7,HINT_BOX8,HINT_BOX9}; controlsBackground[] = {}; class mouse : NORRNmouseHandler {}; class TOP_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = -0.2; w = 1.4; h = 0.28; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class BOTTOM_BORDER { idc = -1; type = CT_STATIC; style = ST_CENTER; x = -0.2; y = 0.89; w = 1.4; h = 0.25; font = "TahomaB"; sizeEx = 0.04; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; text = ""; }; class TITLE_DIALOG { idc = -1; type = CT_ACTIVETEXT; style = ST_LEFT; x = 0.38; y = 0.03; w = 0.4; h = 0.04; font = "TahomaB"; sizeEx = 0.04; color[] = { 1, 1, 1, 1 }; colorActive[] = { 1, 0.2, 0.2, 1 }; colorText[] = { 1, 1, 1, 1 }; colorBackground[] = {0,0,0,1}; soundEnter[] = { "", 0, 1 }; // no sound soundPush[] = { "", 0, 1 }; soundClick[] = { "", 0, 1 }; soundEscape[] = { "", 0, 1 }; action = ""; text = "Unconscious Camera"; default = true; }; class PRESS_HELP : NORRNRscText { idc = 10000; style = ST_MULTI; linespacing = 1; x = 0.8; y = 0.92; w = 0.2; h = 0.1; text = ""; }; class HELP_DIALOG : NORRNRscActiveText { idc = -1; style = ST_LEFT; linespacing = 1; x = 0.8; y = 0.9; w = 0.4; h = 0.02; sizeEx = 0.02; action = "ctrlSetText [10000, ""Keyboard controls: A/D - Previous/Next target W/S - Previous/Next camera N - Toggle NV for Free Cam""]"; text = "Press for Help"; }; class CAM_LIST: NORRNRscCombo { idc = 10004; x = 0.09; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class CAM_select { idc = 10001; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.02; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Camera:"; default = true; }; class FRIEND_LIST: NORRNRscCombo { idc = 10005; x = 0.82; y = 0.03; w = 0.15; h = 0.04; //sizeEx = 0.02; }; class FRIEND_select { idc = 10002; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0,0,0,0}; x = 0.75; y = 0.03; w = 0.08; h = 0.04; font = "TahomaB"; sizeEx = 0.02; text = "Target:"; default = true; }; class Help_1 : NORRNRscNavButton { x = 0.02; y = 0.10; w = 0.11; h = 0.04; idc = 5; colorBackground[] = { 1, 1, 1, 0.5 }; text = "Call for Help"; action = "[] call Norrn_Call4Help"; }; class HINT_BOX0 : NORRNRscText { idc = 10; x = 0.02; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX1 : NORRNRscText { idc = 11; x = 0.02; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX2 : NORRNRscText { idc = 12; x = 0.02; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX3 : NORRNRscText { idc = 13; x = 0.56; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX4 : NORRNRscText { idc = 14; x = 0.56; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX5 : NORRNRscText { idc = 15; x = 0.56; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX6 : NORRNRscText { idc = 16; x = 0.30; y = 0.87; w = 0.4; h = 0.1; }; class HINT_BOX7 : NORRNRscText { idc = 17; x = 0.30; y = 0.89; w = 0.4; h = 0.1; }; class HINT_BOX8 : NORRNRscText { idc = 18; x = 0.30; y = 0.91; w = 0.4; h = 0.1; }; class HINT_BOX9 : NORRNRscText { idc = 19; x = 0.30; y = 0.93; w = 0.4; h = 0.1; }; }; // Norrn_AIBehaviour // JUNE 2009 - norrin private ["_name","_can_revive","_can_revive_2","_can_be_revived","_can_be_revived_2","_enemy_side_1","_enemy_side_2","_goto_revive_distance", "_AI_smoke","_AI_aware","_AI_cover","_AI_dismount","_smoke_shell_types","_close_array","_unc_array","_revive_array","_goto_reviver","_goto_protect", "_revive_units","_protect_units","_mags","_smoke_rounds","_round","_bloggs_pos","_bloggs_offset","_sav_pos","_sav_dir","_known_enemy","_count_enemies"]; _name = _this select 0; _units = _this select 1; _can_revive = Norrn_revive_array select 18; _can_revive_2 = Norrn_revive_array select 19; _can_be_revived = Norrn_revive_array select 20; _can_be_revived_2 = Norrn_revive_array select 21; _medic_1 = Norrn_revive_array select 76; _medic_2 = Norrn_revive_array select 77; _enemy_side_1 = Norrn_revive_array select 23; _enemy_side_2 = Norrn_revive_array select 24; _goto_revive_distance = Norrn_revive_array select 33; _AI_smoke = Norrn_revive_array select 40; _AI_aware = Norrn_revive_array select 49; _AI_cover = Norrn_revive_array select 50; _AI_dismount = Norrn_revive_array select 58; _medpacks = Norrn_revive_array select 80; _smoke_shell_types = ["SmokeShell","SmokeShellRed","SmokeShellGreen"]; //all friendly units nearby _close_array = []; _unc_array = []; _revive_array = []; _goto_reviver = objNull; _goto_protect = objNull; _close_array = nearestObjects [_name, [_can_be_revived, _can_be_revived_2], _goto_revive_distance]; //create array of all friendly units nearby that are unconscious {if (_x getVariable "NORRN_AIunconscious") then {_unc_array = _unc_array + [_x]}}forEach _close_array; //define revive and protector arrays _revive_units = []; _protect_units = []; {call compile format ["if (%1 isKindOf _can_revive && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 0 || %1 isKindOf _can_revive_2 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 0 || %1 isKindOf _can_revive && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1 && (%1 getVariable 'NORRN_medpacks') > 0 || %1 isKindOf _can_revive_2 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1 && (%1 getVariable 'NORRN_medpacks') > 0 || %1 isKindOf _medic_1 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1 && (%1 getVariable 'NORRN_medpacks') > 0 || %1 isKindOf _medic_2 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1 && (%1 getVariable 'NORRN_medpacks') > 0) then {_revive_units = _revive_units + [%1]}", _x]} forEach _units; {call compile format ["if (%1 isKindOf _can_revive && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') || %1 isKindOf _can_revive_2 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') || %1 isKindOf _medic_1 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1 || %1 isKindOf _medic_2 && !(%1 getVariable 'NORRN_unconscious') && !(%1 getVariable 'NORRN_AI_help') && _medpacks == 1) then {_protect_units = _protect_units + [%1]}", _x]} forEach _units; //define the unconscious unit array {if (_x in _protect_units) then {}else {_revive_array = _revive_array + [_x]}}forEach _unc_array; if (count _revive_array > 0) then { _mags = []; if (_medpacks == 0) then { if(_name isKindOf _can_revive || _name isKindOf _can_revive_2) then {_goto_reviver = _name}; }; if (_medpacks == 1 && (_name getVariable "NORRN_medpacks") > 0 ) then { if(_name isKindOf _can_revive || _name isKindOf _can_revive_2 || _name isKindOf _medic_1 || _name isKindOf _medic_2) then {_goto_reviver = _name}; }; if (_AI_cover == 1) then {_goto_protect = _name}; _close_unc = objNull; _close_unc = _revive_array select 0; _revive_units = _revive_units - [_name]; sleep 1; if (count _revive_units > 0) then { {if ((_name distance _close_unc) > (_x distance _close_unc)) then {_goto_reviver = _x}}forEach _revive_units; _protect_units = _protect_units - [_goto_reviver]; if (_name == _goto_reviver) then {_goto_protect = objnull}; {if (_name != _goto_reviver && _AI_cover == 1 && (_name distance _close_unc) > (_x distance _close_unc)) then {_goto_protect = _x}}forEach _protect_units; }; //Overide settings if player calls for help if (_name == _goto_reviver && (_name getVariable "NORRN_AI_help")) then {_goto_reviver = objnull; _close_unc = objNull}; if (_name == _goto_protect && (_name getVariable "NORRN_AI_help")) then {_goto_protect = objnull; _close_unc = objNull}; if ((_name getVariable "NORRN_AI_help") && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _name isKindOf _can_revive || (_name getVariable "NORRN_AI_help") && (count (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 4])) > 1 && _name isKindOf _can_revive_2) then { if (animationState (nearestObjects [_name, [_can_be_revived, _can_be_revived_2], 3] select 1) == r_unc_animation) then { _name playMove "AinvPknlMstpSlayWrflDnon_medic"; _name setVariable ["NORRN_AI_help", false, true]; }; }; //if unit is closest to unconscious unit and is not player moveTo and heal unit if (!isNull _goto_reviver && !isNull _close_unc && _goto_reviver == _name && !isplayer _name && (count _revive_array > 0) || !isNull _goto_protect && !isNull _close_unc && _goto_protect == _name && !isplayer _name && (count _revive_array > 0)) then { if (_goto_reviver == _name && call compile format ["pr_%1 != _name", _close_unc]) then { call compile format ["pr_%1 = _goto_reviver; publicVariable 'pr_%1'", _close_unc]; //hint format ["pr_%1", _close_unc]; }; //check to see if the healer has smoke _mags = magazines _name; _smoke_rounds = []; {if (_x in _smoke_shell_types) then {_smoke_rounds = _smoke_rounds + [_x]}} forEach _mags; //healer throws smoke if (count _smoke_rounds > 0 && _AI_smoke == 1 && _name distance _close_unc < 50 && _name distance _close_unc > 4 && _name == _goto_reviver) then { if (call compile format ["!%1_smoke", _close_unc])then { _round = _smoke_rounds select 0; _bloggs_pos = getPos _close_unc; _bloggs_offset = (_close_unc distance _bloggs_pos); _sav_pos = getPos _name; _set_dir = ((_bloggs_pos select 0) - (_sav_pos select 0))atan2((_bloggs_pos select 1) - (_sav_pos select 1)); _name setDir _set_dir; sleep 0.1; if(_name distance _close_unc > 15) then {_name playMove "AmovPercMrunSlowWrflDf_AmovPercMstpSrasWrflDnon_gthEnd"}; _name removeMagazine _round; _round createVehicle _bloggs_pos; call compile format ["%1_smoke = true; publicVariable '%1_smoke'", _close_unc]; if(_name distance _close_unc <= 20) then {sleep 2}; }; }; //set behaviour healer _name setBehaviour "AWARE"; //clears any known enemies if (_AI_aware == 1) then { _known_enemy = []; _count_enemies = 0; _known_enemy = nearestObjects [_name, [_enemy_units_1,_enemy_units_2], 50]; {if (_name knowsAbout _x > 0.105) then {_count_enemies = _count_enemies + 1}} forEach _known_enemy; while {_count_enemies > 0 && alive _name} do { _count_enemies = 0; _known_enemy = nearestObjects [_name, [_enemy_units_1,_enemy_units_2], 50]; {if (_name knowsAbout _x > 0.105) then {_count_enemies = _count_enemies + 1}} forEach _known_enemy; sleep 0.01; }; }; /////////////////////////////////////// if (_AI_dismount == 1) then { //Reviver and protector dismount vehicle if (vehicle _goto_reviver != _goto_reviver && _name == _goto_reviver || vehicle _goto_protect != _goto_protect && _name == _goto_protect) then { if ((vehicle _goto_reviver) isKindOf "Land" || (vehicle _goto_protect) isKindOf "Land") then { [_name] join grpNull; unAssignVehicle _name; doGetOut _name; }; }; }; //Instruct stopped unit to move if (currentCommand _goto_reviver == "stop" && _name == _goto_reviver || currentCommand _goto_protect == "stop" && _name == _goto_protect)then { [_name] join grpNull; }; /////////////////////////////////////// //healer and protector move to unconscious unit if((_name distance _close_unc) > 10 && time > _doMove_time && (_close_unc getVariable "NORRN_AIunconscious") && _name == _goto_protect) then { if (_name == _goto_protect) then { _close_unc_pos = getPos _close_unc; _name doMove [(_close_unc_pos select 0) + 5, (_close_unc_pos select 1) + 5, (_close_unc_pos select 2)]; }; _doMove_time = time + 4; }; if((_name distance _close_unc) > 10 && time > _doMove_time && (_close_unc getVariable "NORRN_AIunconscious") && _name == _goto_reviver) then { if (_name == _goto_reviver) then { sleep 0.1; _name doMove (getPos _close_unc); }; _doMove_time = time + 4; }; //healer revives unconscious unit if ((_name distance _close_unc) <= 3 && (_close_unc getVariable "NORRN_AIunconscious") && _name == _goto_reviver) then { if (!(_name getVariable "NORRN_AIunconscious") && alive _name) then { _near_revivers = []; _dont_revive = false; _near_revivers = nearestObjects [_name,[_can_revive, _can_revive_2, _medic_1, _medic_2], 6]; {if (animationState _x == "AinvPknlMstpSlayWrflDnon_medic") then {_dont_revive = true}} forEach _near_revivers; if (!_dont_revive) then { _name playMove "AinvPknlMstpSlayWrflDnon_medic"; if (_medpacks == 1) then { _var = _name getVariable "Norrn_medpacks"; _name setVariable ["Norrn_medpacks", (_var - 1), true]; }; }; _name doMove (getPos _name); sleep 0.5; _name doMove (getPos _name); }; }; }; }; if(true) exitWith {}; //file last modified 190609// AI_throwSmoke.sqf private ["_unc_player","_reviver","_smoke_rounds","_round","_bloggs_pos","_bloggs_offset","_sav_pos","_sav_dir"]; _unc_player = unconscious_body; _reviver = _this select 0; _smoke_rounds = _this select 1; while {count _smoke_rounds > 0 && !isNull unconscious_body && alive _reviver} do { //reviver throws smoke if (_reviver distance _unc_player < 60 && _reviver distance _unc_player > 15) then { if (call compile format ["!%1_smoke", _unc_player])then { _round = _smoke_rounds select 0; _bloggs_pos = getPos _unc_player; _bloggs_offset = (_unc_player distance _bloggs_pos); _sav_pos = getPos _reviver; _set_dir = ((_bloggs_pos select 0) - (_sav_pos select 0))atan2((_bloggs_pos select 1) - (_sav_pos select 1)); _reviver setDir _set_dir; sleep 0.1; if(_reviver distance _unc_player > 20) then {_reviver playMove "AmovPercMrunSlowWrflDf_AmovPercMstpSrasWrflDnon_gthEnd"}; _reviver removeMagazine _round; _round createVehicle _bloggs_pos; call compile format ["%1_smoke = true; publicVariable '%1_smoke'", _unc_player]; if(_reviver distance _unc_player <= 20) then {sleep 2}; }; }; sleep 2; }; if (true) exitWith {}; //Last modified - 010309// Norrn_CallOut // JUNE 2009 - norrin private ["_unconscious_body"]; _unconscious_body = _this select 0; _unconscious_body setVehicleInit "this say (commentsBrian select floor(random 11))"; processInitCommands; 20 + ceil(random 10); //file modified 120609// Norrn_DeleteUncBody // JUNE 2009 - norrin _unconscious_body = _this select 0; detach _unconscious_body; _unconscious_body removeAllEventHandlers "dammaged"; _unconscious_body removeAllEventHandlers "hit"; _unconscious_body setVariable ["NORRN_AIunconscious", false, true]; sleep 1.5; clearVehicleInit _unconscious_body; _unconscious_body setPos NORRN_respawn_mrkr; deleteVehicle _unconscious_body; _unconscious_body = objNull; call compile format ["norrn_dead_%1 = objNull", _name]; if (_name == player) then {unconscious_body = objNull}; //file modified 120609 /* Drop - drops ammo when a player respawns - AI_enabled gets called on _drop_weapons || _cadaver Check root revive_init.sqf for additional parameters written by alef modified by norrin ************************************************************************************** start drop.sqf */ private ["_drop_weapons","_cadaver","_bury_timeout","_body","_safec","_max_timeout","_wep","_mag","_timeout"]; _drop_weapons = NORRN_revive_array select 93; _cadaver = NORRN_revive_array select 94; _bury_timeout = NORRN_revive_array select 95; _body = _this select 0; _upos = _this select 1; _max_timeout = 1200; // maximum allowed _wep = weapons _body; _mag = magazines _body; _body setVariable ["NORRN_AIunconscious", false, true]; if (_bury_timeout > 0 && _bury_timeout < _max_timeout) then { _timeout = time + _bury_timeout; }else{ _timeout = time + _max_timeout; }; if (_drop_weapons == 1 && _cadaver == 0) then { _holder = "WeaponHolder" createVehicle _upos; _holder setPos _upos; sleep 1; {_body action ["DropMagazine",_holder, _x];sleep 0.6;} forEach _mag; {_body action ["DropWeapon",_holder, _x];sleep 0.7;} forEach _wep; sleep 1; }; sleep 2; if (_cadaver == 0) then { deleteVehicle _body; _body = objNull; }else{ waitUntil{time > _timeout}; if (!isNull _body) then { if (_drop_weapons == 1) then { _holder = "WeaponHolder" createVehicle _upos; _holder setPos _upos; sleep 1; {_body action ["DropMagazine",_holder, _x];sleep 0.6;} forEach _mag; {_body action ["DropWeapon",_holder, _x];sleep 0.7;} forEach _wep; }; sleep 2; deleteVehicle _body; _body = objNull; }; }; if (true) exitWith {}; //Last modified 11/8/7 //Returns an average slope value of terrain within passed radius. Private["_centerHeight","_direction","_height","_position","_radius"]; _position = _this Select 0; _radius = _this Select 1; if (IsNil "GetSlopeObject") then { //GetSlopeObject = "Logic" CreateVehicle [0,0,0]; _group = createGroup sideLogic; GetSlopeObject = "Logic" createUnit [[0,0,0], _group]; }; GetSlopeObject SetPos _position; _centerHeight = GetPosASL GetSlopeObject Select 2; _height = 0; _direction = 0; for [{_count = 0},{_count < 8},{_count = _count + 1}] do { GetSlopeObject SetPos [(_position Select 0)+((sin _direction)*_radius),(_position Select 1)+((cos _direction)*_radius),0]; _direction = _direction + 45; _height = _height + abs (_centerHeight - (GetPosASL GetSlopeObject Select 2)); }; _height / 8; //11/8/7 MM - Created file. //modified 15/06/09 by norrin for ArmA2 // I_need_help // JUNE 2009 - norrin private ["_can_revive","_can_revive_2","_goto_revive_distance","_AI_smoke","_AI_cover","_call_for_AI_help","_smoke_shell_types","_helpComments","_revive_units","_potential_revivers","_possible_reviver","_reviver","_mags","_smoke_rounds"]; _unit = unconscious_body; _can_revive = Norrn_revive_array select 18; _can_revive_2 = Norrn_revive_array select 19; _can_be_revived = Norrn_revive_array select 20; _can_be_revived_2 = Norrn_revive_array select 21; _medic_1 = Norrn_revive_array select 76; _medic_2 = Norrn_revive_array select 77; _goto_revive_distance = Norrn_revive_array select 33; _AI_smoke = Norrn_revive_array select 40; _AI_cover = Norrn_revive_array select 50; _call_for_AI_help = Norrn_revive_array select 59; _medic_1 = Norrn_revive_array select 76; _medic_2 = Norrn_revive_array select 77; _medpacks = Norrn_revive_array select 80; _smoke_shell_types = ["SmokeShell","SmokeShellRed","SmokeShellGreen"]; _reviver = objNull; if (_call_for_AI_help == 0) exitWith {titleText ["This option is not enabled in this mission","PLAIN",1]}; _helpComments = ["Brian_Need_help","Brian_A_little_help_here"]; _unit say (_helpComments select floor(random 2)); //create revivable unit array _revive_units = []; {call compile format ["if (!isNull %1) then {_revive_units = _revive_units + [%1]}", _x]} forEach NORRN_player_units; //Find and designate reviver if (count (nearestObjects [_unit, [_can_be_revived, _can_be_revived_2], _goto_revive_distance]) > 1) then { _potential_revivers = []; _potential_revivers = nearestObjects [_unit, [_can_revive, _can_revive_2, _medic_1,_medic_2], _goto_revive_distance]; _possible_reviver = []; _possible_protectors =[]; {if (_x in _revive_units) then {if (!(_x getVariable "NORRN_AI_help") && !(_x getVariable "NORRN_unconscious") && _medpacks == 0 || !(_x getVariable "NORRN_AI_help") && !(_x getVariable "NORRN_unconscious") && _medpacks == 1 && (_x getVariable "NORRN_medpacks") > 0) then {_possible_reviver = _possible_reviver + [_x]}}}forEach _potential_revivers; {if (_x in _revive_units) then {if (!(_x getVariable "NORRN_AI_help") && !(_x getVariable "NORRN_unconscious")) then {_possible_protectors = _possible_protectors + [_x]}}}forEach _potential_revivers; if ((count _possible_reviver) > 0) then { _reviver = _possible_reviver select 0; titleCut [format ["\n\nCalling %1 for help", name _reviver], "PLAIN", 0.5]; _reviver setVariable ["NORRN_AI_help", true, true]; Norrn_helper_list = Norrn_helper_list + [(_reviver)]; if (!isplayer _reviver) then { //Instruct stopped AI unit to move if (currentCommand _reviver == "stop")then { if (!local _reviver) then { _reviver setVehicleInit "[this] join grpNull"; processInitCommands; }else{ [_reviver] join grpNull; }; }; //move AI reviver to unconscious body (_unit) call compile format ["_reviver setVehicleInit 'this doMove (getPos %1)'", _unit]; processInitCommands; //Added helper throw smmoke if (_AI_smoke == 1) then { //check to see if the reviver has smoke _mags = magazines _reviver; _smoke_rounds = []; {if (_x in _smoke_shell_types) then {_smoke_rounds = _smoke_rounds + [_x]}} forEach _mags; //healer throws smoke if (count _smoke_rounds > 0) then {[_reviver, _smoke_rounds] spawn Norrn_AI_throwSmoke;}; }; }else { //call compile format ["_reviver setVehicleInit 'if (this == %1) then {titleText [''%2 has called for help'',''PLAIN'', 1]}'", _reviver, (name player)]; call compile format ["_reviver setVehicleInit 'hint ''%1 has called for help \nCheck map if markers are enabled for wounded players position'''", name player]; processInitCommands; hint ""; }; }; _possible_protectors = _possible_protectors - [_reviver ]; if ((count _possible_protectors) > 1 && _AI_cover == 1) then { _goto_protector = _possible_protectors select 0; if (!isplayer _goto_protector) then { //Instruct stopped AI unit to move if (currentCommand _goto_protector == "stop")then { if (!local _goto_protector) then { _goto_protector setVehicleInit "[this] join grpNull"; processInitCommands; }else{ [_goto_protector] join grpNull; }; }; //move AI cover unit to unconscious body call compile format ["_goto_protector setVehicleInit 'this doMove [((getPos %1) select 0) + 5, ((getPos %1) select 1) + 5, ((getPos %1) select 2)]'", _unit]; processInitCommands; }; }; }; [_reviver] execVM "revive_sqf\functions\wait_check.sqf"; if (true) exitWith {}; // file last edited 240609// Norrn_LeaderFix // JUNE 2009 - norrin _group_leader = _this select 0; call compile format ["_leader = %1", _group_leader]; _group = group _leader; {call compile format ["if (group %1 != _group && !(%1 getVariable 'Norrn_dead')) then {[%1] joinsilent _group; %1 doMove (getPos %1)}", _x]} forEach _my_group; if (_leader != formleader _name) then { {_x doFollow _leader} forEach units _group; {_x doMove getPos _x} forEach units _group; }; //file modified 260609 // Norrn_LivesRemain // JUNE 2009 - norrin private["_name","_max_respawns","_no_respawns","_respawns_left","_no_left"]; _name = _this select 0; _max_respawns = _this select 1; _no_respawns = (_name getVariable "NORRN_lives_used") + 1; _respawns_left = _max_respawns - _no_respawns; _no_left = format ["Lives remaining: %1", _respawns_left]; if (_name == player) then {hint _no_left}; _name setVariable ["NORRN_lives_used", _no_respawns, true]; //file modified 030609// Norrn_RespawnPos1 // JANUARY 2008 - norrin _name = _this select 0; _pos = _this select 1; _mobile_spawn = Norrn_revive_array select 51; _no_base_2 = no_base_2; _no_base_2b = no_base_2b; _no_base_3 = no_base_3; _no_base_3b = no_base_3b; _no_base_4 = no_base_4; _no_base_4b = no_base_4b; if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; _Base_4 = ""; _no_base_2 = no_base_3; _no_base_2b = no_base_3b; _no_base_3 = no_base_4; _no_base_3b = no_base_4b; }; }; if (local _name && isplayer _name) then {titleText ["Revive timer has been exceeded. Respawning at marker", "PLAIN", 0.3]}; sleep 2; _base_1_distance = _pos distance getMarkerPos _Base_1; _base_2_distance = _pos distance getMarkerPos _Base_2; _base_3_distance = _pos distance getMarkerPos _Base_3; _base_4_distance = _pos distance getMarkerPos _Base_4; _base_distance = _base_1_distance; _respawn_base = 1; if (_base_distance > _base_2_distance && !_no_base_2 && !_no_base_2b) then {_base_distance = _base_2_distance; _respawn_base = 2;}; if (_base_distance > _base_3_distance && !_no_base_3 && !_no_base_3b) then {_base_distance = _base_3_distance; _respawn_base = 3;}; if (_base_distance > _base_4_distance && !_no_base_4 && !_no_base_4b) then {_base_distance = _base_4_distance; _respawn_base = 4;}; sleep 0.01; [_respawn_base, _name] execVM "revive_sqf\respawn_at_base.sqf"; true; //file created 080109// Norrn_RespawnPos2Player // JULY 2009 - norrin _unconscious_body = _this select 0; _unconscious_markers = Norrn_revive_array select 4; NORRN_spawn_chosen = false; titleText ["\n\n\n\n\n\n\n\n\n\nRevive timer has been exceeded. Choose a marker for respawn", "BLACK FADED", 10]; NORRN_r_time_expire = true; if (!isNull _unconscious_body) then { _unconscious_body setVehicleInit "this switchMove 'Deadstate';"; processInitCommands; }; if (_unconscious_markers == 1) then {deleteMarker format["%1 is down", player]}; waitUntil {NORRN_spawn_chosen}; true; //file modified 010709// Norrn_RespawnPos2Player // JANUARY 2008 - norrin _name = _this select 0; _pos = _this select 1; _mobile_spawn = Norrn_revive_array select 51; call compile format ["if (%1_a) then {waitUntil {!%1_a}};", leader (group _name)]; _pos_leader = getPos (leader (group _name)); _no_base_2 = no_base_2; _no_base_2b = no_base_2b; _no_base_3 = no_base_3; _no_base_3b = no_base_3b; _no_base_4 = no_base_4; _no_base_4b = no_base_4b; if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; _Base_4 = ""; _no_base_2 = no_base_3; _no_base_2b = no_base_3b; _no_base_3 = no_base_4; _no_base_3b = no_base_4b; }; }; if (local _name && isplayer _name) then {titleText ["Revive timer has been exceeded. Respawning at marker", "PLAIN", 0.3]}; sleep 2; _base_1_distance = _pos_leader distance getMarkerPos _Base_1; _base_2_distance = _pos_leader distance getMarkerPos _Base_2; _base_3_distance = _pos_leader distance getMarkerPos _Base_3; _base_4_distance = _pos_leader distance getMarkerPos _Base_4; _base_distance = _base_1_distance; _respawn_base = 1; if (_base_distance > _base_2_distance && !_no_base_2 && !_no_base_2b) then {_base_distance = _base_2_distance; _respawn_base = 2;}; if (_base_distance > _base_3_distance && !_no_base_3 && !_no_base_3b) then {_base_distance = _base_3_distance; _respawn_base = 3;}; if (_base_distance > _base_4_distance && !_no_base_4 && !_no_base_4b) then {_base_distance = _base_4_distance; _respawn_base = 4;}; sleep 0.01; [_respawn_base, _name] execVM "revive_sqf\respawn_at_base.sqf"; true; //file created 080109 // respawn_chance.sqf // JUNE 2009 - norrin _body = _this select 0; _respawns = _this select 1; switch (_body getVariable "NORRN_body_part") do { case "": {_respawn_chance = 500}; case "hands": {_respawn_chance = 200}; case "legs": {_respawn_chance = 70}; case "body": {_respawn_chance = 50}; case "head_hit": {_respawn_chance = 20}; }; if (_respawns == 2) then {_respawn_chance = (_respawn_chance/2)}; if (_respawns == 3) then {_respawn_chance = (_respawn_chance/3)}; if (_respawns == 4) then {_respawn_chance = (_respawn_chance/4)}; if (_respawns == 5) then {_respawn_chance = (_respawn_chance/5)}; _respawn_chance// respawn_time.sqf // JUNE 2009 - norrin _body = _this select 0; _respawns = _this select 1; _revive_time_limit = Norrn_revive_array select 27; switch (_body getVariable "NORRN_body_part") do { case "": {_revive_time_limit = _revive_time_limit}; case "hands": {_revive_time_limit = _revive_time_limit}; case "legs": {_revive_time_limit = (_revive_time_limit * 4)/5}; case "body": {_revive_time_limit = (_revive_time_limit * 3)/5}; case "head_hit": {_revive_time_limit = (_revive_time_limit * 2)/5}; }; if (_respawns == 2) then {_revive_time_limit = (_revive_time_limit/2)}; if (_respawns == 3) then {_revive_time_limit = (_revive_time_limit/3)}; if (_respawns == 4) then {_revive_time_limit = (_revive_time_limit/4)}; if (_respawns == 5) then {_revive_time_limit = (_revive_time_limit/5)}; _revive_time_limit// Norrn_SlopeFix - AI disabled // JUNE 2009 - norrin _pos = _this select 0; _slope = _this select 1; _radius = 0; _found_it = false; while {_slope >= NORRN_max_slope && !_found_it} do { _center_x = _pos select 0; _center_y = _pos select 1; _radius = _radius + 10; _angle = 0; while {_angle < 350 && !_found_it} do { _x1 = _center_x - (_radius * sin _angle); _y1 = _center_y - (_radius * cos _angle); _slope = [[_x1, _y1, 0], 1] call GetTerrainSlope; if (_slope < NORRN_max_slope) then { _pos = [_x1, _y1, 0]; _found_it = true; }else{ _angle = _angle + 15; sleep 0.005; }; }; }; if (_found_it) then { player setVariable ["NORRN_pos_x", _pos select 0, true]; player setVariable ["NORRN_pos_y", _pos select 1, true]; }; //file modified 030609//toggle_dialog_fade if (Norrn_DialogBlink == 20) then { Norrn_DialogBlink = 0; }else{ Norrn_DialogBlink = 20; }; if (true) exitWith {}// Norrn_UncAnimFix // JANUARY 2009 - norrin private["_name","_pos","_center_x","_center_y","_radius","_angle","_found_it","_set_pos","_x1","_y1","_slope"]; _name = _this select 0; _pos = _this select 1; _name setCaptive true; _center_x = _pos select 0; _center_y = _pos select 1; _radius = 500; _angle = 0; _found_it = false; _set_pos = [(_pos select 0) - 500, _pos select 1]; while {_angle <= 350 && !_found_it} do { _x1 = _center_x - (_radius * sin _angle); _y1 = _center_y - (_radius * cos _angle); _slope = [[_x1, _y1, 0], 1] call GetTerrainSlope; if (!(surfaceiswater [_x1, _y1])&& _slope < 0.78) then { _set_pos = [_x1, _y1]; _found_it = true; }; _angle = _angle + 10; }; if (_angle == 360) then {_set_pos = NORRN_respawn_mrkr}; _name setPos [_set_pos select 0, _set_pos select 1, 0]; //file created 080109 // wait_check // MAY 2009 - norrin private ["_reviver","_d","_name"]; _reviver = _this select 0; _name = name _reviver; _d = 0; if (!isNull _reviver) then { waitUntil {!(player getVariable "NORRN_unconscious") || !alive _reviver || !(_reviver getVariable "NORRN_AI_help")}; _reviver setVehicleInit "this doMove (getPos this);"; processInitCommands; if (!alive _reviver && dialog) then { titleCut[format ["Oh no %1 is down, you will need to call for help again", _name], "PLAIN", 1]; Norrn_helper_list = Norrn_helper_list - [_reviver]; }; if (!isNull unconscious_body && alive _reviver && dialog) then { if (!(_reviver getVariable "NORRN_AI_help") && (unconscious_body distance _reviver) > 4.5) then { titleCut [format ["%1 is helping another unit you will need to call for help again", (name _reviver)],"PLAIN", 1]; Norrn_helper_list = Norrn_helper_list - [_reviver]; }; }; _reviver setVariable ["NORRN_AI_help", false, true]; }else{titleCut ["No potential revivers are currently available", "PLAIN", 1]}; if (true) exitWith {}; //Last edited 06/05/09// Norrn_WaterFix - AI disabled // JUNE 2009 - norrin _body = _this select 0; _unit = _this select 1; _water_dialog = NORRN_revive_array select 45; if (surfaceIsWater getPos _body) then { waitUntil{alive call compile format["%1",_unit]}; _name = call compile format["%1",_unit]; {_name removeMagazine _x} forEach magazines _name; _name setPos _pos; deleteVehicle _body; _name setCaptive true; if (_water_dialog == 1 && _name == player) then { titleText ["Choose wash ashore or press escape to close dialog and start at current position","PLAIN", 0.4]; _dialog_1 = createDialog "respawn_button_1c"; }; if (_name == player) then {titlecut [" ","BLACK IN", 0.4]}; }; while {surfaceIsWater getPos _name} do { disableUserInput false; if(!alive player) then { _body = player; _pos = getPos _body; waitUntil{alive call compile format["%1",player]}; _name = call compile format["%1",player]; _name setPos _pos; deleteVehicle _body; _name setCaptive true; }; _name setdammage 0; if (vehicle _name != _name && _name == driver (vehicle _name)) then {_name action ["GETOUT", vehicle _name]}; if (vehicle _name != _name && _name == gunner vehicle _name) then {_name action ["GETOUT", vehicle _name]}; _water = true; sleep 1; }; sleep 0.1; if (!surfaceIsWater getPos _name && _water) then { if (vehicle _name != _name) then {_name action ["GETOUT", vehicle _name]}; _name setCaptive false; if (_name == player) then {titlecut [" ","BLACK OUT",10]}; _pos = getPos _name; _dir = getDir _name; _Offset = 0; _name switchMove r_unc_animation; sleep 1; player setVariable ["NORRN_pos_x", _pos select 0, true]; player setVariable ["NORRN_pos_y", _pos select 1, true]; _name setPos NORRN_respawn_mrkr; sleep 0.1; _water = false; if (_name == player) then {disableUserInput true}; }; _name; //file modified 030609/* HEAL_ACTION SCRIPT Causes the player to execute the medic animation when the heal action is chosen and resets dammage to 0. JANUARY 2009 - norrin *********************************************************************************************************************** begin heal.sqf */ player playMove "AinvPknlMstpSlayWrflDnon_medic"; player setdammage 0; NORRN_healed = true; sleep 8; if (true) exitWith {}; //file last edited 130109/* PLAYER HEAL SCRIPT - Doc SNKMAN's Amazing Snake Oil Elixir All playable units can heal themselves a x number of times JANUARY 2009 - norrin ******************************************************************************************************* Based on an idea by SNKMAN ******************************************************************************************************* Start player_heal.sqf */ if (!local player) exitWith {}; _unit = _this select 0; _no_of_heals = NORRN_revive_array select 29; _lower_bound_heal = NORRN_revive_array select 30; _upper_bound_heal = NORRN_revive_array select 31; _c = 0; _no_heals_remaining = _no_of_heals; _remove_heal = false; //Probably best not to play with the following code unless you know what you are doing sleep 0.5; //Prompt joining player the number of heals remaining _no_heals = format ["Heals remaining: %1", _no_of_heals]; // hint _no_heals; //Body of the script while {true} do { //While player alive if (alive player) then { //add heal action for players if(_c == 0 && getDammage player >= _lower_bound_heal && getDammage player <= _upper_bound_heal && _no_heals_remaining > 0) then { NORRN_HealAction = player addAction ["Heal", "revive_sqf\heal_sqf\heal.sqf","", 0, false, true]; _c = _c + 1; }; if (NORRN_healed) then {_remove_heal = true}; if(_remove_heal) then { _no_heals_remaining = _no_heals_remaining - 1; hint format ["Heals remaining: %1", _no_heals_remaining]; player removeAction NORRN_HealAction; _c = 0; NORRN_healed = false; _remove_heal = false; sleep 4; hint""; sleep 6; }; if (getDammage player > _upper_bound_heal) then { player removeAction NORRN_HealAction; _c = 0; sleep 1; }; sleep 2; }; //if player is dead if (!alive player) then { _no_heals_remaining = _no_of_heals; _no_left = format ["Heals remaining: %1", _no_heals_remaining]; //hint _no_left; NORRN_healed = false; _c = 0; sleep 2; }; }; //file last edited 130109// Load_act.sqf // JULY 2009 - norrin private ["_args","_dragger","_vcl","_wounded"]; _args = _this select 3; _dragger = _args select 0; _vcl = _args select 1; _wounded = _args select 2; r_drag_sqf = false; _dragger removeAction NORRN_loadWoundedAction; if ((_vcl emptyPositions "cargo") > 0) then { detach _wounded; _dragger setVehicleInit "this switchMove ''"; _wounded setVariable ["NORRN_LoadVcl", _vcl, true]; processInitCommands; sleep 1; _wounded setVehicleInit "nul = [this] execVM 'revive_sqf\load_wounded\load_wounded.sqf'"; processInitCommands; player removeAction NORRN_dropAction; }else{ hint "No space left in vehicle"; }; NORRN_load_wounded_action = true; if (true) exitWith {};// Load_wounded.sqf // JULY 2009 - norrin private ["_wounded","_vcl","_group"]; _wounded = _this select 0; if (!local _wounded) exitWith {}; sleep 1; _vcl = _wounded getVariable "NORRN_loadVcl"; _wounded setVariable ["NORRN_unit_dragged", true, true]; _wounded assignAsCargo _vcl; _wounded moveInCargo _vcl; sleep 1; _wounded setVehicleInit "this switchMove 'kia_hmmwv_driver';"; processInitCommands; if (local _wounded) then { waitUntil {!(_wounded getVariable "NORRN_unconscious")|| !alive _wounded || vehicle _wounded == _wounded || driver _vcl == _wounded || gunner _vcl == _wounded}; if (driver _vcl == _wounded || gunner _vcl == _wounded) exitWith { _wounded action ["EJECT", _vcl]; }; if (vehicle _wounded != _wounded && alive _wounded) then { _wounded playMove "BasicDriver"; }; }; sleep 0.01; if (true) exitWith {}; // unLoad_act.sqf // JUNE 2009 - norrin private ["_args","_dragger","_vcl","_wounded"]; _args = _this select 3; _name = _args select 0; _vcl = _args select 1; _crewVcl = _args select 2; _name removeAction NORRN_pullOutAction; for [{ _loop = 0 },{ _loop < count _crewVcl },{ _loop = _loop + 1}] do { _unit = _crewVcl select _loop; if (_unit getVariable "NORRN_AIunconscious") then { unassignVehicle _unit; sleep 0.05; _unit action ["EJECT", _vcl]; sleep 1; _unit setVehicleInit "this switchMove r_unc_animation"; processInitCommands; _unit setVariable ["NORRN_unit_dragged", false, true]; }; sleep 0.1; }; if (true) exitWith {};/* BANDAGE WOUND SCRIPT Causes the unit to execute the medic animation when the revive action is chosen JUNE 2009 - norrin *********************************************************************************************************************** begin bandage.sqf */ _name = _this select 3; //Uneccesary actions removed & drop body added _name removeAction NORRN_bandageAction; _name playMove "AinvPknlMstpSlayWrflDnon_healed"; _var = _name getVariable "Norrn_bandages"; _name setVariable ["Norrn_bandages", (_var - 1), true]; _med_supplies = format ["Medpacks Remaining: %1\nBandages Remaining: %2", (_name getVariable "Norrn_medpacks"), (_name getVariable "Norrn_bandages")]; if (_name == player) then {hint _med_supplies}; // Set variables _name setVariable ["NORRN_bleedDamage", (getDammage _name), false]; _name setVariable ["NORRN_Bleed", false, true]; _name setVariable ["NORRN_stopBleed", true, true]; sleep 8; if (true) exitWith {};/* BANDAGE TEAMATE SCRIPT Causes the unit to execute the medic animation when the revive action is chosen JUNE 2009 - norrin *********************************************************************************************************************** begin bandage_teammate.sqf */ _array = _this select 3; _name = _array select 0; _wounded = _array select 1; //Uneccesary actions removed & drop body added _name removeAction NORRN_bandageBuddyAction; _wounded setVehicleInit "this playMove 'AmovPpneMstpSnonWnonDnon_healed'"; processInitCommands; _name playMove "AinvPknlMstpSlayWrflDnon_medic"; _var = _name getVariable "Norrn_bandages"; _name setVariable ["Norrn_bandages", (_var - 1), true]; _med_supplies = format ["Medpacks Remaining: %1\nBandages Remaining: %2", (_name getVariable "Norrn_medpacks"), (_name getVariable "Norrn_bandages")]; hint _med_supplies; // Set variables _wounded setVariable ["NORRN_bleedDamage", (getDammage _wounded), true]; _wounded setVariable ["NORRN_Bleed", false, true]; _wounded setVariable ["NORRN_stopBleed", true, true]; sleep 8; if (true) exitWith {};// JUNE 2009 - norrin _medic_medpacks = NORRN_revive_array select 83; _unit_medpacks = NORRN_revive_array select 84; _medic_bandages = NORRN_revive_array select 85; _unit_bandages = NORRN_revive_array select 86; _medic_1 = NORRN_revive_array select 76; _medic_2 = NORRN_revive_array select 77; NORRN_medic_sup = true; player removeAction NORRN_medSuppliesAction; //Define the number of medpacks player setVariable ["NORRN_medpacks", _unit_medpacks, true]; if (player isKindOf _medic_1 || player isKindOf _medic_2) then {player setVariable ["NORRN_medpacks", _medic_medpacks, true]}; player setVariable ["NORRN_bandages", _unit_bandages, true]; if (player isKindOf _medic_1 || player isKindOf _medic_2) then {player setVariable ["NORRN_bandages", _medic_bandages, true]}; //Prompt player the no medpack and bandages remaining _med_supplies = format ["Medpacks Remaining: %1\nBandages Remaining: %2", (player getVariable "NORRN_medpacks"), (player getVariable "Norrn_bandages")]; hint _med_supplies; if (true) exitWith {};/* DEPLOY CAMO SCRIPT norrin, April 2008 *********************************************************************************************************************************** deploy_camo.sqf */ _vcl = _this select 0; _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; switch (playerSide) do { case west: {"USBasicAmmunitionBox" createVehicle [_pos_vcl select 0, (_pos_vcl select 1) - 2, (_pos_vcl select 2) - 4];}; case east: {"RUBasicAmmunitionBox" createVehicle [_pos_vcl select 0, (_pos_vcl select 1) - 2, (_pos_vcl select 2) - 4];}; case resistance: {"GuerillaCacheBox" createVehicle [_pos_vcl select 0, (_pos_vcl select 1) - 2, (_pos_vcl select 2) - 4];}; }; _vcl setFuel 0; _camo = "Land_CamoNetB_NATO" createVehicle _pos_vcl; _camo setDir (_dir_vcl + 90); _camo setPos [(_pos_vcl select 0) + (sqrt (4) * cos (155 - _dir_vcl)), (_pos_vcl select 1) + (sqrt (4) * sin (155 - _dir_vcl)) , 0]; NORRN_camo_net = true; publicVariable "NORRN_camo_net"; _vcl removeAction NORRN_l_spawn_act; if (true) exitWith {}; /* DEPLOY CAMO MAN SCRIPT norrin, JUNE 2008 *********************************************************************************************************************************** deploy_camo.sqf */ _vcl = _this select 0; _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; norrn_mob_mash = "MASH" createVehicle _pos_vcl; publicVAriable "norrn_mob_mash"; norrn_mob_mash setDir (_dir_vcl + 90); norrn_mob_mash setPos [(_pos_vcl select 0) + (sqrt (4) * cos (155 - _dir_vcl)), (_pos_vcl select 1) + (sqrt (4) * sin (155 - _dir_vcl)) , 0]; NORRN_camo_net = true; publicVariable "NORRN_camo_net"; _vcl removeAction NORRN_l_spawn_act; _pos_vcl = getPos player; _dir_vcl = getDir player; if (true) exitWith {}; // mobile_Marker.sqf // APRIL 2009 - norrin _Base_1 = NORRN_revive_array select 13; _mrker_pos = []; if (isServer) then { _mrker_pos = getMarkerPos "base"; sleep 1; _mrkr_ex = _Base_1; createMarker [_mrkr_ex, _mrker_pos]; _mrkr_ex setMarkerColor "ColorBlue"; _mrkr_ex setMarkerType "Empty"; _mrkr_ex setMarkerText ""; _mrkr_ex setMarkerSize [0.4, 0.4]; } else { if (!NORRN_camo_net) then { _mrker_pos = getMarkerPos "base"; sleep 1; _mrkr_ex = _Base_1; createMarker [_mrkr_ex, _mrker_pos]; _mrkr_ex setMarkerColor "ColorBlue"; _mrkr_ex setMarkerType "Empty"; _mrkr_ex setMarkerText ""; _mrkr_ex setMarkerSize [0.4, 0.4]; } else{ if (!isNull r_mobile_spawn_vcl) then { _mrker_pos = [(getPos r_mobile_spawn_vcl) select 0,(getPos r_mobile_spawn_vcl) select 1]; }; if (!isNull norrn_mob_mash) then { _mrker_pos = [(getPos norrn_mob_mash) select 0,(getPos norrn_mob_mash) select 1]; }; sleep 1; _mrkr_ex = _Base_1; createMarker [_mrkr_ex, _mrker_pos]; _mrkr_ex setMarkerColor "ColorBlue"; _mrkr_ex setMarkerType "Flag1"; _mrkr_ex setMarkerText "Mobile Respawn"; _mrkr_ex setMarkerSize [0.4, 0.4]; }; }; if (true) exitWith {}; //050409 /* LANDROVER REMOVE SPAWN ACTION SCRIPT Gives the driver the option to create a respawn base with ammo at position of vehicle norrin, March 2008 *********************************************************************************************************************************** landy_remove_spawn.sqf */ _unit = _this select 0; _unit removeAction NORRN_l_spawn_act; _unit removeAction NORRN_l_remove_spawn_act; if (true) exitWith {}; /* MOBILE SPAWN ACTION SCRIPT Gives the driver the option to create a respawn base with ammo at position of vehicle norrin, JUNE 2009 *********************************************************************************************************************************** mobile_spawn.sqf */ _vcl = _this select 0; _unit = _this select 1; NORRN_camo_reset = false; _c = 0; sleep 3; if (NORRN_camo_net) then {_c = 1}; if (player == _vcl) then { if (!local player) exitWith{}; while {true} do { if (!alive player) then { waitUntil {alive player}; }; _pos = getPos player; if (speed player == 0 && _c == 0 && !NORRN_camo_net && !(surfaceIsWater (getPos player))) then { NORRN_l_spawn_act = player addAction ["Deploy Mobile Respawn Point", "revive_sqf\mobile\deploy_camo_man.sqf", [_vcl], 10, false, true, ""]; _c = 1; }; if (speed player == 0 && _c == 1 && NORRN_camo_net && player distance norrn_mob_mash <= 7) then { NORRN_l_remove_spawn_act = player addAction ["Stow Mobile Respawn Point", "revive_sqf\mobile\stow_camo_man.sqf", [_vcl], 10, false, true, ""]; _c = 2; }; if (speed player != 0 && _c == 1 && !NORRN_camo_net || _c == 1 && surfaceIsWater (getPos player)) then { player removeAction NORRN_l_spawn_act; _c = 0; }; if (speed player != 0 && _c == 2 && NORRN_camo_net || _c == 2 && NORRN_camo_net && player distance norrn_mob_mash > 7) then { player removeAction NORRN_l_remove_spawn_act; _c = 1; }; if (NORRN_camo_reset) then { NORRN_camo_reset = false; publicVariable "NORRN_camo_reset"; _c = 0; }; sleep 1; }; }else{ while {alive _vcl} do { if (!local _vcl || _unit != driver _vcl|| !isplayer (driver _vcl)) exitWith {}; if (_unit != driver _vcl) exitWith { _vcl removeAction NORRN_l_spawn_act; _vcl removeAction NORRN_l_remove_spawn_act; }; _pos = getPos _vcl; if (speed _vcl == 0 && _c == 0 && !NORRN_camo_net && !isEngineOn _vcl) then { NORRN_l_spawn_act = _vcl addAction ["Deploy Mobile Respawn Point", "revive_sqf\mobile\deploy_camo.sqf", [_vcl], 10, true, true, ""]; _c = _c + 1; }; if (speed _vcl == 0 && _c == 1 && NORRN_camo_net) then { NORRN_l_remove_spawn_act = _vcl addAction ["Stow Mobile Respawn Point", "revive_sqf\mobile\stow_camo.sqf", [_vcl], 10, true, true, ""]; _c = 2; }; if (speed _vcl != 0 || isEngineOn _vcl) then { _vcl removeAction NORRN_l_spawn_act; _vcl removeAction NORRN_l_remove_spawn_act; _c = 0; }; if (NORRN_camo_reset) then { NORRN_camo_reset = false; publicVariable "NORRN_camo_reset"; _c = 0; }; sleep 1; }; }; if (true) exitWith {}; /* MOVE SPAWN POINT SCRIPT norrin, April 2009 *********************************************************************************************************************************** move_spawn.sqf */ if (!isServer) exitWith {}; ScopeName "r_move_spawn"; _vcl = _this select 0; _mobile_type = _this select 1; _c = 0; _Base_1 = NORRN_revive_array select 13; _Base_respawn = NORRN_revive_array select 36; _no_enemy_sides = NORRN_revive_array select 22; _enemy_side_1 = NORRN_revive_array select 23; _enemy_side_2 = NORRN_revive_array select 24; _mobile_base_start = NORRN_revive_array select 52; _Base_1_respawn = _Base_respawn select 0; no_base_1 = false; no_base_1b = false; sleep 5; if (_mobile_type == 1) then { if (isnull NORRN_mobile_man) then {waitUntil {!isnull NORRN_mobile_man}; _vcl = NORRN_mobile_man}; }; while {true} do { if (_mobile_type == 0) then { if (alive _vcl && NORRN_camo_net && _c == 0) then { _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; //move mobile respawn marker _Base_1 setMarkerPos [(_pos_vcl select 0) + 4, (_pos_vcl select 1) + 4, (_pos_vcl select 2) + 4]; _Base_1 setMarkerText _Base_1; _Base_1 setMarkerColor "ColorBlue"; _Base_1 setMarkerType "Flag1"; _Base_1 setMarkerSize [0.4, 0.4]; sleep 1; if (_no_enemy_sides == 1 && _Base_1_respawn == 0 || _no_enemy_sides == 2 && _Base_1_respawn == 0) then { r_ms_trig_1 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_1 setTriggerType "NONE"; r_ms_trig_1 setTriggerActivation [_enemy_side_1, "PRESENT", true]; r_ms_trig_1 setTriggerArea [50, 50, 0, false]; r_ms_trig_1 setTriggerStatements ["this && !no_base_1", "no_base_1 = true; publicVariable 'no_base_1'",""]; sleep 0.1; r_ms_trig_2 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_2 setTriggerType "NONE"; r_ms_trig_2 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; r_ms_trig_2 setTriggerArea [50, 50, 0, false]; r_ms_trig_2 setTriggerStatements ["this && no_base_1", "no_base_1 = false; publicVariable 'no_base_1'",""]; }; sleep 0.1; if (_no_enemy_sides == 2 && _Base_1_respawn == 0) then { r_ms_trig_3 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_3 setTriggerType "NONE"; r_ms_trig_3 setTriggerActivation [_enemy_side_2, "PRESENT", true]; r_ms_trig_3 setTriggerArea [50, 50, 0, false]; r_ms_trig_3 setTriggerStatements ["this && !no_base_1b", "no_base_1b = true; publicVariable 'no_base_1b'", ""]; sleep 0.1; r_ms_trig_4 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_4 setTriggerType "NONE"; r_ms_trig_4 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; r_ms_trig_4 setTriggerArea [50, 50, 0, false]; r_ms_trig_4 setTriggerStatements ["this && no_base_1b", "no_base_1b = false; publicVariable 'no_base_1b'", ""]; }; _c = 1; }; if (alive _vcl && !NORRN_camo_net && _c == 1 || !alive _vcl) then { _Base_1 setMarkerPos getMarkerPos _mobile_base_start; _Base_1 setMarkerText _mobile_base_start; sleep 1; if (_no_enemy_sides == 1 && _Base_1_respawn == 0 || _no_enemy_sides == 2 && _Base_1_respawn == 0) then { if (!isnull r_ms_trig_1) then {deleteVehicle r_ms_trig_1}; sleep 0.2; if (!isnull r_ms_trig_2) then {deleteVehicle r_ms_trig_2}; sleep 0.2; }; if (_no_enemy_sides == 2 && _Base_1_respawn == 0) then { if (!isnull r_ms_trig_3) then {deleteVehicle r_ms_trig_3}; sleep 0.2; if (!isnull r_ms_trig_4) then {deleteVehicle r_ms_trig_4}; sleep 0.2; }; //reset enemy spawn variables no_base_1 = false; no_base_1b = false; publicVariable "no_base_1"; publicVariable "no_base_1b"; sleep 1; _c = 0; if (!alive _vcl) then {breakout "r_move_spawn"}; }; sleep 2; }; if (_mobile_type == 1) then { //if (isnull NORRN_mobile_man) then {waitUntil {!isnull NORRN_mobile_man}; _vcl = NORRN_mobile_man}; if (NORRN_camo_net && _c == 0) then { _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; //move mobile respawn marker _Base_1 setMarkerPos [(_pos_vcl select 0) + 4, (_pos_vcl select 1) + 4, (_pos_vcl select 2) + 4]; _Base_1 setMarkerText _Base_1; _Base_1 setMarkerColor "ColorBlue"; _Base_1 setMarkerType "Flag1"; _Base_1 setMarkerSize [0.4, 0.4]; sleep 1; if (_no_enemy_sides == 1 && _Base_1_respawn == 0 || _no_enemy_sides == 2 && _Base_1_respawn == 0) then { r_ms_trig_1 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_1 setTriggerType "NONE"; r_ms_trig_1 setTriggerActivation [_enemy_side_1, "PRESENT", true]; r_ms_trig_1 setTriggerArea [50, 50, 0, false]; r_ms_trig_1 setTriggerStatements ["this && !no_base_1", "no_base_1 = true; publicVariable 'no_base_1'",""]; sleep 0.1; r_ms_trig_2 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_2 setTriggerType "NONE"; r_ms_trig_2 setTriggerActivation [_enemy_side_1, "NOT PRESENT", true]; r_ms_trig_2 setTriggerArea [50, 50, 0, false]; r_ms_trig_2 setTriggerStatements ["this && no_base_1", "no_base_1 = false; publicVariable 'no_base_1'",""]; }; sleep 0.1; if (_no_enemy_sides == 2 && _Base_1_respawn == 0) then { r_ms_trig_3 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_3 setTriggerType "NONE"; r_ms_trig_3 setTriggerActivation [_enemy_side_2, "PRESENT", true]; r_ms_trig_3 setTriggerArea [50, 50, 0, false]; r_ms_trig_3 setTriggerStatements ["this && !no_base_1b", "no_base_1b = true; publicVariable 'no_base_1b'", ""]; sleep 0.1; r_ms_trig_4 = createTrigger["EmptyDetector", getMarkerPos _Base_1]; r_ms_trig_4 setTriggerType "NONE"; r_ms_trig_4 setTriggerActivation [_enemy_side_2, "NOT PRESENT", true]; r_ms_trig_4 setTriggerArea [50, 50, 0, false]; r_ms_trig_4 setTriggerStatements ["this && no_base_1b", "no_base_1b = false; publicVariable 'no_base_1b'", ""]; }; _c = 1; }; if (!NORRN_camo_net && _c == 1) then { _Base_1 setMarkerPos getMarkerPos _mobile_base_start; _Base_1 setMarkerText _mobile_base_start; sleep 1; if (_no_enemy_sides == 1 && _Base_1_respawn == 0 || _no_enemy_sides == 2 && _Base_1_respawn == 0) then { if (!isnull r_ms_trig_1) then {deleteVehicle r_ms_trig_1}; sleep 0.2; if (!isnull r_ms_trig_2) then {deleteVehicle r_ms_trig_2}; sleep 0.2; }; if (_no_enemy_sides == 2 && _Base_1_respawn == 0) then { if (!isnull r_ms_trig_3) then {deleteVehicle r_ms_trig_3}; sleep 0.2; if (!isnull r_ms_trig_4) then {deleteVehicle r_ms_trig_4}; sleep 0.2; }; //reset enemy spawn variables no_base_1 = false; no_base_1b = false; publicVariable "no_base_1"; publicVariable "no_base_1b"; sleep 1; _c = 0; }; if (!isplayer _vcl) then { waitUntil {!isnull NORRN_mobile_man}; _vcl = NORRN_mobile_man; }; if (!alive _vcl && isplayer _vcl)then { sleep 1; waitUntil{alive (call compile format ["%1", _vcl])}; _vcl = call compile format ["%1", _vcl]; }; sleep 2; }; }; //26/04/09 /* STOW CAMO SCRIPT norrin, April 2008 *********************************************************************************************************************************** stow_camo.sqf */ _vcl = _this select 0; _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; _ammo_crates = nearestObjects [_vcl, ["ReammoBox"], 10]; {deleteVehicle _x} forEach _ammo_crates; _shed = nearestObject [_vcl, "Land_CamoNetB_NATO"]; deleteVehicle _shed; //reset enemy spawn variables no_base_1 = false; no_base_1b = false; publicVariable "no_base_1"; publicVariable "no_base_1b"; _vcl setFuel 1; NORRN_camo_net = false; publicVariable "NORRN_camo_net"; NORRN_camo_reset = true; publicVariable "NORRN_camo_reset"; _vcl removeAction NORRN_l_remove_spawn_act; if (true) exitWith {}; /* STOW CAMO MAN SCRIPT norrin, JUNE 2008 *********************************************************************************************************************************** stow_camo.sqf */ _vcl = _this select 0; _pos_vcl = getPos _vcl; _dir_vcl = getDir _vcl; deleteVehicle norrn_mob_mash; NORRN_camo_net = false; publicVariable "NORRN_camo_net"; NORRN_camo_reset = true; publicVariable "NORRN_camo_reset"; _vcl removeAction NORRN_l_remove_spawn_act; if (true) exitWith {}; /* VECHICLE RESPAWN FOR MOBILE SPAWN ACTION SCRIPT Respawns Vehicle for mobile_spawn scripts norrin, July 2008 *********************************************************************************************************************************** Name the mobile respawn vehicle: r_mobile_spawn_vcl And put this in the init line: this addEventHandler ["GETIN",{if ((_this select 1) == "driver") then {NORRN_landy_script = [_this select 0, _this select 2] execVM "revive_sqf\mobile\mobile_spawn.sqf"}}]; this addEventHandler ["GETOUT",{[_this select 0] execVM "revive_sqf\mobile\mobile_remove_spawn.sqf"}]; call{[this, 10] execVM "revive_sqf\mobile\vcl_respawn.sqf"} Where 10 in the last line is the time before the mobile_respawn_vcl respawns after being destroyed *********************************************************************************************************************************** vcl_respawn.sqf */ if (!isServer) exitWith {}; _vcl = _this select 0; _respawn_delay = _this select 1; _vcl_dir = getDir _vcl; _vcl_pos = getPos _vcl; _type_vcl = typeOf _vcl; _Base_1 = NORRN_revive_array select 13; _mobile_base_start = NORRN_revive_array select 52; waitUntil {!alive _vcl}; NORRN_camo_net = false; publicVariable "NORRN_camo_net"; _wait = time + _respawn_delay; _vcl removeAction NORRN_l_spawn_act; _vcl removeAction NORRN_l_remove_spawn_act; _ammo_crates = nearestObjects [_vcl, ["ReammoBox"], 10]; {deleteVehicle _x} forEach _ammo_crates; _shed = nearestObject [_vcl, "shedBig"]; deleteVehicle _shed; waitUntil {time > _wait}; _vcl_new = _type_vcl createVehicle _vcl_pos; _vcl_new setDir _vcl_dir; _vcl_new setPos _vcl_pos; _init = "this setVehicleVarName 'r_mobile_spawn_vcl';this addEventHandler ['GETIN',{if ((_this select 1) == 'driver') then {NORRN_landy_script = [_this select 0, _this select 2] execVM 'revive_sqf\mobile\mobile_spawn.sqf'}}]; this addEventHandler ['GETOUT',{[_this select 0] execVM 'revive_sqf\mobile\mobile_remove_spawn.sqf'}];"; _vcl_new setVehicleInit _init; processInitCommands; [_vcl_new, _respawn_delay] execVM "revive_sqf\mobile\vcl_respawn.sqf"; [_vcl_new, 0]execVM "revive_sqf\mobile\move_spawn.sqf"; if (true) exitWith {}; // init_respawn.sqf // JULY 2009 - norrin _heal_yourself = NORRN_revive_array select 8; //Initialise revive script {if (!isNull (call compile format ["%1", _x])) then {[_x, NORRN_player_units] execVM "revive_sqf\respawn\respawn.sqf"}}forEach NORRN_player_units; //Initialise heal script for each player if (_heal_yourself == 1 && !isNull player) then {[player] execVM "revive_sqf\heal_sqf\player_heal.sqf"}; if (true) exitWith {};// respawn.sqf // JULY 2009 - norrin _unit = _this select 0; _respawn_position = NORRN_revive_array select 28; _respawn_at_base_addWeapons = NORRN_revive_array select 11; _respawn_at_base_magazines = NORRN_revive_array select 34; _respawn_at_base_weapons = NORRN_revive_array select 35; _respawnAtBaseWait = NORRN_revive_array select 68; _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; waitUntil{call compile format["!isNull %1",_unit]}; _name = call compile format["%1",_unit]; _unconscious_body = objNull; _pos = []; sleep 2; _base_weps = []; _base_mags = []; if (_respawn_at_base_addWeapons == 1 && count _respawn_at_base_magazines == 0 && count _respawn_at_base_weapons == 0) then { _base_weps = weapons _name; _base_mags = magazines _name; }; while {true} do { waitUntil {local (call compile format["%1",_unit])}; _name = call compile format["%1",_unit]; waitUntil {!alive _name || !local _name}; if (local _name) then { if (_name == player) then {titletext["","BLACK FADED", 5]}; _pos = getPos _name; _weps = weapons _name; _mags = magazines _name; waitUntil{alive call compile format["%1",_unit]}; _name = call compile format["%1",_unit]; // Give player weapon and mag loadout they had prior to dying removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _mags; {_name addWeapon _x} forEach _weps; _name selectWeapon (primaryWeapon _name); if (_respawn_position == 2 && isplayer _name || _respawn_position == 3 && isplayer _name) then { if (_mobile_spawn == 1) then { if (NORRN_camo_net) then { _no_respawn_points = NORRN_revive_array select 12; _Base_1 = NORRN_revive_array select 13; _Base_2 = NORRN_revive_array select 14; _Base_3 = NORRN_revive_array select 15; _Base_4 = NORRN_revive_array select 16; }else{ _no_respawn_points = NORRN_revive_array select 12; _no_respawn_points = _no_respawn_points - 1; _Base_1 = NORRN_revive_array select 14; _Base_2 = NORRN_revive_array select 15; _Base_3 = NORRN_revive_array select 16; }; }; closedialog 0; if (_no_respawn_points == 1) then {_dialog_5 = createDialog "respawn_button_1map"}; if (_no_respawn_points == 2) then {_dialog_5 = createDialog "respawn_button_2map"}; if (_no_respawn_points == 3) then {_dialog_5 = createDialog "respawn_button_3map"}; if (_no_respawn_points == 4) then {_dialog_5 = createDialog "respawn_button_4map"}; if (_no_respawn_points > 0) then {ctrlSetText [1, _Base_1]}; if (_no_respawn_points > 1) then {ctrlSetText [2, _Base_2]}; if (_no_respawn_points > 2) then {ctrlSetText [3, _Base_3]}; if (_no_respawn_points > 3) then {ctrlSetText [4, _Base_4]}; }; if (_respawn_position == 1) then {_respawn_at_base = [_name, _pos] call Norrn_RespawnPos1}; // Unit respawns at chosen location if player if (_respawn_position == 2 && isplayer _name || _respawn_position == 3 && isplayer _name) then {_respawn_at_base = [_unconscious_body] call Norrn_RespawnPos2}; // Unit respawns closest to leader if not player if (_respawn_position == 2 && !isplayer _name || _respawn_position == 3 && !isplayer _name) then {_respawn_at_base = [_name, _pos] call Norrn_RespawnPos2AI}; if ((_respawnAtBaseWait select 1) != 0) then { _timer = (_respawnAtBaseWait select 1); _name disableAI "anim"; _c = 1; _name setCaptive true; while {_timer >= 0} do { if (_c >= 1 ) then { if (_name == player) then { _timer_message = format ["You will respawn in %1 seconds", _timer]; titletext [_timer_message,"BLACK FADED", 0.3]; }; _timer = _timer - 1; _c = 0; }; sleep 0.05; _c = _c + 0.05; }; _name setCaptive false; _name enableAI "anim"; }; // Add respawn at base weapons if this option is being used if (_respawn_at_base_addWeapons == 1) then { // Added code for respawning at base with original mission load-out - 260409 if (count _respawn_at_base_magazines == 0 && count _respawn_at_base_weapons == 0) then { removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _base_mags; {_name addWeapon _x} forEach _base_weps; _name selectweapon primaryweapon _name; } else { removeAllWeapons _name; {_name removeMagazine _x} forEach magazines _name; removeAllItems _name; {_name addMagazine _x} forEach _respawn_at_base_magazines; {_name addWeapon _x} forEach _respawn_at_base_weapons; _name selectweapon primaryweapon _name; }; }; }; sleep 1; }; frame = 0.040 0.000, 0 0.040, 2 0.080, 3 0.120, 1 0.240, 3 0.280, 7 0.320, 6 0.360, 5 0.400, 7 0.440, 5 0.480, 3 0.520, 2 0.560, 0 0.680, -1 OggSvorbis>OggSg- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS(eWmy{ƺjnejyv˯ywzrwf0} |W'[*ΟߜU.m/ClųY~깇7ט%B+ry%ԵE݈FrUG s'x0_\z(^dvvaǭζ m { pp+z4ihhˈ'>NZgRT9 tl{l$[y ڟoXGFs;$;f6=>zw orަJ763Ҏ/_Ibw0@=Ewn\?izAV{_CG͵0%Vu $dT8p6 p'Vs,ƞΆ ׆ wͦV9j;[}o}Fdw 漞iZTio9@S];w"$?GV =wxoO95!;`9٦iWmr߅]hS/:ixjʖ$]2uF^d2 %4*Юg|eR'fЍ>z5m;lک^im'Vkv:(<|, gYݖ}aˤogә~c3hW&Y?sɍl_ˢ+^5u`{]w-铆U fSmkr! ZBK:O>yka;M\=Ro~3V26iG$-6Op+ H!ީ)rj/ڷρb lB·4w^윾׳3~ګnLRM9}OK&~Aj%0?Ff?xeƝc nb&2p_ES̘!b'[U--i(ZP`>IpS"跟 >`E4꟝P:C .! 9W囄2Rw^_'nME\9ӿHgvMS\'!e5k ~.; _a\Kx@SAk eQa!b`HӶݠ/BEdP(Z,Nr={P1U4Eʎ|ˊs?ϙ%" R-FQqcn3a' >}h٬(A3"h ӯy7"Nyzy_Qi6<|MgܘیQUX\BJ4MnDN'qE缍YPs˲{byHbKv}yfa٭?yD4)2խYϸl{x[j:-٘WfσdW$( IpT~/OvN!mQ`1?k!h@i:b߽U`d/[q@ZP}oɺaOv,i pÇi%kJsⶊ 8>zrЮ [q>PFyՆD_-(Sb2tb7;2.[[+/Z,5{J$9&ۏ}}^`i3IȠ[A k{kA=-58Fs{=K">"I^jVw:(T;~l/ K:ןsq 1u|v)Cbb!J_o?Cy_Lntj4 o;=Y:hU?I x~ġ_یO~>?:Nzt{>La7YhLZu>{we_M^vVk}«|I5-jMeS}{s[m=@]>yyjmźՅ|be0d$,ZT˽g3<7 F[3gv+ r܌Ytn*9&V&:ה ,~*޷m?54e:CHC-z̫xycϯdzÙ 6)ޜz{^0NᬹH׶Yӕθ`s$eJC:ڧk76}T(>=y:3[FuSS]xu푣Գuk񕿯M1D󉋩۞knz|?jgվ--b}XҐgں_ljYw&_#I`Kz"rXqi}?tp WeOMyo\.Hzq{zq$RRשQk>&h3T1}3zOggS ^- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS. "^x|uW[l~uxldcss۽v [u_-[ wg3Pive=*&0p^urtսOժ$z̝^~ |׉ fo:5Q/m>#O4eYLߗszfI5l%G?mՍ=)?,ܣmnk|gpQuZY=t<5qW +xxgV(o}M-sh8}܌ =van{%[hvn~{}[ۚ?˕\Eq#m|}=s>N}Od3n 8OʵGJVO.̮;68ڗxԒ!g>;o>aMWJC/;PVcѣ߽ŀLH85B[6ּO)7 k0y&t\b 00/vPj20f$0󝌰0j&x$X ˹+)5'KU:Lb-Ɣ@c@9T>Qj=a kqq02&[9颫8 T+>sreƝ{tt~$PTUNb2߃~}ĭ?{oas(rPFgm{tɎ|૏ P!t;sW:(/jɽs?Iu7[Iݕ^SFTk&><4W> W7 ӱUv\zJoKJgpH@;Ol8A`Ckaެ@}pRa,<ԞKNN-SCx![ <9Lgck~VB܆}"S|Pv(ELeMxb?V7fPZ5 gfxroGnO{VBC\v !G}9SF%$nZٻoݽ[{ט|O򑵿<q>">\rY mt=ȸ"xV[Ona:K B=~WZIp=jgKu*sq ~ $ۼ'>=^sԦ[?tY u9'tV_d._=z_H[lvѯͼσi#5W0 _ٱ/|xaswr5 3pk>!`; NJ1bKTi+(C*X&0zQ2g%kllܓSk6n%ڌlv4ײ? i05w` B,Y['T$?>lgĄ6KdMN?ua_љu<듘ZY-sQqֵ7:cЇIӖWRooӄuoi+'^(4N5x:_'l Kx<w:S"?*@YECdZ'kj uց B.0VN?j7LY pZf(/𙧺ުMvoq=9+j[}mn>7A?f4]kƞ _-[3+Q'`L[iyNc נի2bQD(+{سR/K8aFp={3o8:Gmen?o#\(a$HOЅȇnQh>_>6b5KvB)ב@ SdY@D}2R|wa^rė=lH;X6Zsݞ:} D}i+kZ {ĺ=/6Y5`e [ _}2b{h!H 9mӝ}vr:q <*Tt޻}.N'UHu@3LS]=5l9\;ci7#[S0&Wӎ>:K( U-[' wgj:KDi)BTڗ=i2nMj3~JIg~):YmMowk)%f qCVJ61)1f*4eaķ02Fo >/'>o5jz >L> 6F&h No =:29'czw7E>iZM 1<2;D7)b9"ܮOPx NCD:O(Zy}d5*Jw\5菍}fB:W!,@PX@ nQqo(3ax*.?i=5u =Oܺ΢Z*1ARp,Γ߅>Lv)#Z8oۮ4&XA_#R4kSpeF;q"ԥBZmvoQLL >ړ7}@s00 s(FۃmwLxg~is/e%W-3(ZaClr@mpmn@N@¤B'CSyR}^RܿꜦJQ|}s+,W8_7xSt+>ӽ=-^\Y?a!1[Kh>w*r^ `JOc-ͻأ`9v.UhЙ=hY@6#)oɫ+#ESy1s ?@8v|=:$ bM{ž&uɅ,aR\W^V?i? Ȝhy$zZGnՖ[wKIΊsoڲlNP~+eN䶮{[MƤ `%g9WҜ#Iw~ *KgH~hà͓,ֶTcr픠M{eg%M+naTU+fda֡}Z/&?80ZE)]KHʐ{zl]Br 2~?*Έ!3*37')^ǶUQU!h4&z(@p/Ep\%O$1vLmYlZx$yAg7ߞf/]ګ[{nerLVmvt.-^D`75x{I!ܼn f"LݴrsS܍~_73XCdn!t3!֧*&=7ml'>R5 P3_OdkxW)ks43){|gʎrnVSݘgc6喨O4&Xm5{X#6;'5$kuQ%n M`t {X*lBjVb./$wBvn$Z}0Pvb,{h0K.0+E=r_o%x"w?kfY N nu$ m;míBvrftMF3?aM7^e f8k1pzcdʳݹECCΕ?OggS =h- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS- HYdi]vfkswU}qf{unN70ʟK<*x O,SuF?kW~Qށ)@,r)U%C{er8{DPW%MrdyZ@!{{RZrڲp=h^+#*RfVy la_P9_,@ȎU7\|^,׭FHѼޙ bjT&is *I<٩pef_0"(0 t³&H~"f̀ȧZ0 ~oX>8+5 PF/3]o3_D,e.D._|GTwl!UpbkyɮFo>G?E%^di+[?>/wXLm)D|+DK =?q@h8Or)zv[_i#٠HnDbXx2|-' `{'{V]YW#Q;hΐ(k!Z7H8#Ռfr\T25%7y潛ˬ)Q_hQ\ 6%+ܾOjE!6pWʾjNDX@q`_ۥu$c()TFSiW~ @?.,`|eٕ9IHJDD㝫nq~TVjsX%e} Yt>/:ȽS=`S7OWFH)OB*z0xpQ8 A.W w)NaL@ u vmQ-?d h1 n[DU(j|r% tb @gK.nu, yC-XGq# ( 0GavS^kk@{ 1v+J:@έ +1&C٩ɻ݄;q۲-mʕ܀?gE@ٵ÷u wNgo}FK~*0]'A!TK ) Olٹgcj_ *> s6[{WvF>\PuVW `dF6o P6i}e#)g㏎jy~JZ+;R[)%}>w1b&o6ꍰ T~ @[jNN|V&(ɒXdPҧl>nY5P銱6m_^"l 0 td)ȓbY}ۛ$vɴr@X9RP3S)yaj-hO"q?<iʬ?k3<+QJ) e:V#}kJ1ZhN@( zpzjq^?G'ρ|d =HP cebi/E7d^Gٞ1~*ش~)Hψ^K(ϑ/T]S.:$О(Po.!(ͧ@ٺ)Q\C$-oZ2T-2B%T>޲u=ڮjAy`R8h!Hv:;j,(&\aBiՌT2qӣs.@fNTqO.?kbrtlDHr]՛RMɏ؂tϴy6NͤDim|Fq}+foH HBAy( g"36kq叶XoɆ2HwD2U0u!I+.b;(u7GqM M5J rʕ A3zI$X"Q 5Kӝ >^:Zvѿ[X`iH$rZ{oVzqg]PHۛzۊ>#I nRe4v/0$bqiW#@IH8IQn8o 7clh\;*q]oגUW}wrrDI֭]uVѶVh6$99=}?j&-dw+=a)55̈́ww$ |k5ФJ7b . gDn(0J![}RZ!'̔?:1Uũ8Գ2ȜsJ@9Ydho~K uJysMs<6 ~T ]+ *&:`+&(;$KE+ҍ!^+t |]k!,L](% 0bO!GAiBu"@ՄX>Md|N YlF(zK=z6q0" źL଒[ < 6HfW y8-ج@(!• X*D$ZGMaNsz[)^&T 7C X)x@*&8Z7j`TqYU4~J\1gqZ[r@s:p {X×;cй<<As0kb;AT4@?~!t2X9[YO6EhMXIکK{AO ܽZ˝_7 \V sElT5h|X6{윘 Wa9f/lRᜭ'v%7fo|Y?8%]OgܬnyIR9ntkJ53(Oͮu]F<DOͮ<ӊЁ8i}sJjuށ@nt{Nlj2S;W_E{+,M1zLixuݰmnm3}v1,/:(ʤK475\e܇;y9Ɓb+q`ޤr*/UꝪU{ fSg;NXW|2#?ϻ泂4 玢K-ͲͿc20\gW鍇iC]=o?kibyf= 1 -W7 Ľ[dNJ8ht{ UR3|m,__z~\=t3g3}k4t{x9y@&{w߾qeąrtN,mZ8%&6"ˍv'xxI]s2eЧVòPs6틖I]T5t_?6Ʊ] KJɲ5OuODGLڳnS;"A=2E5^EƗvt0n*Yoj~o50yuunF`넴0(b6uS?$ZVeUn,-oOއL0춊]0δ< o[/~u";77yy8n9E zܤ4]7𗧇 6KgZo.?Tn٬uZ-1~F]jT^"Ͻ=ݤ])2}De4nUZZC,Loֺb,iR\/%F/,~hDF*9OM_yL5Ғl$p߱rJ^4ͭZZ"hN.NGR\PpAkԳ FE'[9B}Ls駟!rt $Q yZ|cԞ>\&Vframe = 0.040 0.000, 2 0.040, 5 0.080, 6 0.120, 7 0.160, 5 0.200, 1 0.240, 2 0.280, 0 0.320, 1 0.360, 3 0.400, 1 0.440, 0 0.680, -1 OggS{ ~vorbis>OggS{ 5[- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS){ lCF|wx|{ĪX{{u~zoƤqnqU$U2 咘[Oś;I~gK.^C>n񝓝|Ša~HJ~qm|2)uw/dJΏKbyTgQkhutĀ=b;t)NTW}^ouG7nH;$/TS_ ;PJf7FG]c:#=OVj?CņEƶ\ p"ťМ9~zCf֙Itu= &kI[}-htͫ:"2~'øJ1=^{l֠7e߂Wܫ;CjSX)S]ylU(mGbb8ٍvFVobw{B*ƞ"^sV2OR$l8$pjX4y5 [t)p>q::R31zU(QŰcZj(~n_HBi&MS=9-@|Op{H̓ZFܣ+پ NH'_z㉾վRD%Y_瑇R4a4h͵t#7ߛGwel{S3y jݮ8nF^[uu6EOkvn5OnYb8;h:?+MN he|"ygnM~మX=ML^]m‹5lݡw[ܬ=6әm]7KrUzƵ~ѬZ9_~_6GSzEjwNu|3}~vȯ%ǍoFb?3e6kxml{ڶS\i,BK 2zɸ[:fiof00<^ytY}6Ț_a%}Zb|0ev,!@?ʵhX.ru77ujZ\!F$+{^E=sz)%5쒆|{R^W>.(U1۱l6fƸL6E?VeznHV X.g]4]H]ٙ05߬}9R5mUnJ5(X14V8Xߤ?OڃeL'Ir&! ַLX\U_Di{gۚڝ<a^l9+5?[{÷>vUhQ_9%%uW΋ԿDs۸@bQ"۞MXr5 3"hO=EOJu6?90D'R:fY ]x0Y+OȝŸM/o]bSZ-1kd [xy'/wX3LVW}O٤d}g7>6r' 7 J^1;eP䓠>!QӚms<IĒގRbfƸ;r{ekz[ܾxL2x F55ӕK/ν?>>Y'h7Xv,mS3fl['UOs#1bpuO7 t+/Ӵăorڻ$ʤ۾iZյn.6qc˹~l orf2lydik8 PfNtx{yz!7* pmK6/_[2sIy]~;v^9sWg?qoupg`zoFN ڗ86|uwf k4DMD>^Gjz?5'K{=tN\STP¬flzںpp\5K.m_lLafTvm,- o%I%lJ"JT%NiI K AE‹=7*P?NR*T"}ut`Q{|s?% eε촮T1`*'@&/3u_DaMl9>bqh_lC=>[-KݟR?qF<>}v=d!Fo`7{՚ZX *.?aHׄ]NT˕'S ofPR^"H~7kQ?'ΐoEX 3~m22|=-qPmcPNkvD3-ꏏݳҧKOrh @Ijr^-jg8DEkw=a޵nL vgaܽgaɽ(47P-yr3t}?[o/@[|+\9ƧCg Q,EZ;6g6ծ L&W4_[8_;WޥҒeܥ~mi\8e$8&Ļf[ofJl<~f S j+3RKYٓA;=O\nc:<6G[|Wt1%]K?psѴU\g&GL/;Zt|kBt}w͇v~٫cd:l.*H3+{JՐS?|]j{'ycV1jYB!vkb.赥._ym;zEjU6/ʑS{e(4?wH K1MpD@ΖKj~nHemũ"4@Q{hx)P l7o!ceGOggS@{ @pR qm;[T\0U]f [@v?>"Z~eh%i޼ۿ{^4_s:K}p=OggSD  - vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS*D [3ejiw|[ynn`inq~'@+6`݃ ^A-f+k֛e5|fI>^^/~6 >G1ӷJ3ҌGs.ŷe4I/xEc!:\  svTɿdN6\H黋y/]DW&꽦/ǹLL/Fnm3ٿ {=HPUB&Fݼ_۹ɏqIZ[q)bLKk,_ھ՜<ܳIi;|㓳t1k;yTm"ߓJ-\t-ZuMF/.Y.mZ٣FYP9WaQ;-}X=9;wGӈȿp}'Dk4`Gzeٲ&C{zhu/#eYf3aynح Z?(6o-9)炽jK?{s1McÇ{a_ K1?hu4E݆7_ȹ;ݸd6Ѧ=<ccڒ!h3 T1LN` hU0oc*͚s32'Q'}tQԥRݮ=zᆅ3Ӣۺ#켮)İ! `ssՀ;bb&I,Ҙ~e6Z݉( S2*WWx#v[[Q .af>j|6S0|:i;K5ewq3u^09n]y{s+nFK⭥[;OY{·즶tAž5Lv3zžFeks 4Yr5F#{u*rf#x=8H{7Jx?9$zlg/whNk&7Y37S[T*WZ&!WGUmХ &G-:߲?kZC[qDOh9c;,]t v0٥#ǻqBbJcl &Qލf ~mfK"~O+(C? tǕH)ԙSVdQٙ&p޿-y[&icm컵bS,݅/mߺF;8;}5*5֥vlj5Pn{(׿?zc;cίz"ɐr_3dxa~q_S*O?C 0w!OW ߻6Ruڷf^xuh%豝>T9>Zӟ <v)D}m{s Ta0 7 W=%"ʏ[_$K–]h_}K1}IcD=ʫXk5ߔ#9o)#7"˺(o/cS/X>iIJl¯cUqҚ Pk/VX1 'iһ։t]}t^{bs"Ab{"i[zqq+˶y;.rgB+;~.e@XKJvFL'ɺA`q>w}hbyO"x4SMUr{އy_]Ujdc$03۝R|/}yxΏsN12IJg>iIqi ޟ{sx.Hxd.yToFhwMQfH É  YSy*dpXwkֱ6c70᎝ynow:  ܗz"*: aByjݫK!U>~\ucz9VIC>6O0b 8SEԖxtuE"tzW.H]/ω$Org|mFEZĠI&ҪBV"'a]\ú9Ƽڲmps=.1]J=3 +\Vp_kg~B,,$m4kJ=Z{"ռރϕf/{8:@ EUiFx°vZnemeu=`T f[x.ðe H=YO; t?-5 Zf?XAv{Ȝt2YRad#8a[n״'3g4C'͙ I 'Dّͣ :uU8Up}>)x{,(瞮ckRQ5npR1剹-$w֖\e {hn?~WvAW*$h5P 4S@Vopޅ1b>_̡Nxi'3 7R4ƦNmAxLFc{<n==Bw_eGٱ&SH_ dTBS\+>YQL=IZPJr+cBlw o[".l.- ɝ4gԛX{i Ace7}?3qT@Zkl.zyd×u(r* |uIs_^H'^_SZ } i+l,Fj.MUtQQRlnbx#XF{*Rpwš{zgӦfz8䠯7w|̸Ӵ_g lz3a?uA (1zG?ާs "ׇE ?_Ł8W =Gd|gԑAq sQ [jF-zo6rN5p7CkCMaBH }Θ?}#XycOi|;kFH$%0q"xdtU_%4iRGb*$5lAۇ39X#h#ju(g ,M=?p9M{Hlm%]4FvY %ZR~Q~qk %D?~v^Pˡ?օ^T6Swf`6: gEP,Pæ0* dy!a%N:pA~:RknZuQAVt s5`&K 0.OD5o]H2 A,AS-Ǿ6 dū@#3SvTU>5+xٯu pJ}Aiͮ1?i|93Pʅd13+__jb[)`Y{=T) ,@ ,TH/;쫺'-oPjg#J&`!ӟI`&A܈'YJ&+0>XEEyqQ(?k*j_.j EgkOgv\&9%%7b\C5%`~hr}^QK64d@HY%1rո(%@l|ߌL qͿH.wnL ;WC?Pa :¨:GKa6vzi5(Ez~蟏h[vwN Y=i_{_q`b̬4RiyiСQ#[P ܾƜP J5 ټL B=zϟ,v,D]&KJC}> [xUQЪFyۊUE^߇&:(bs^*[]AxYl}`] Q/A %9Ht+"[Ng7~Ɖa xw>пq2j_5z᫨0ǯks4-*3mS>A0jjk-\qk1Ǔ92n][Cc,0vNVX*@7@ޛGlZw@Lv<@<|,>ۉ0޶H\xTFϧe (VQJ"3wUu>X=:zc̼LcZ2)SY߅oܮdFW-q# ^xjOMm<=>_5$ ]8L۵޻71Diٟ| Ƃ{:,JY+1}&Jl&2?*4b)]v**>(~ /_-ms_D(. (諒4&`{Ο! 7{mϙ 8ﻓ=F!g{1ipþ 흠j&)9h/z|5%K>>AӼ:A{fK?YrtnI"wNDnث1EY㊲où&A ,2@*Ws{$J`$pַ?џ&̎-չfn$bќ2 ٚlɚ;NqDާ(X(̓_ Κ#kg}iVcr.@oO=,cݾ6T^&q}?7EUZg ]ІKMGwmR/,.+PEKh:-B8%Y?'M)w~ɕKzkWhE 7ac^N2j} Hkӱ?6/c\dIS oAuRxgڏJ$,#*<35SB̊z@)u:w 5y:&~ 8:3nDV';sW~{t}PG?-tٯ˂ GkxY=B89i5D do(~` "||> feme2KFwMUڋCtǣI( 13{rKn=(ınI{tjKg]$Z6g&UƑOSڈe x-ˉv'* Vը/-H);1mo+vm;qۢm oFjP~ǯ֮oW>yrfNl=E#`\> Ֆ|0?O񱿣|VwwOݳ:;D'j4iV cG3ͪYMframe = 0.040 0.000, 0 0.040, 2 0.120, 3 0.160, 6 0.200, 5 0.240, 2 0.280, 1 0.360, 2 0.400, 4 0.440, 5 0.480, 4 0.560, 7 0.600, 6 0.640, 4 0.720, 1 0.800, 0 0.920, -1 OggS V)vorbis>OggS U- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS. }Ctvtrdqhbupy\tZ69οg,iS]?MY~zPYp ]SJy{Vb"#V7Т}+ޭ睽x8o17b2>OSm_+g!,nF6wmq Erwql΁;0]| ^JLu/GP2˧rޠ1|E hޗ['{:*MT_>_)(tZEG4}i,QӅ US'OF*o\οL>@icwL @RnѧLʡ9#+49|+=br_P} I/)j5"n}'{>񛀌H$RLzLđt^bbHL7͓CVPe[|+;xGR7~Y}j ^-L8}ﵐR9|< UUݸW:j>D6&wt{g( 2iwRh`]%V 3v˼ ϷtxozOp;X\mjw/ :E?d oQ$ (P:H]>v]B"mohTU3@UkI`D^t*g?nLm2w5tWbª* y^-18X} ㊼1<7Aȷ[:XK\)ptoVuެ@},+gD߾\>Fa ~ڮ~ . *U`3iuH_y@]tg{M^_P;)[.*寛pL#gfZG6.9G=;' ڥNfX!Sꛨ~1G%p /JLx0~4X.@!EApzaȦ ̃@/G@'wR l> ˆ@5I V(ȝDrV(.mS ʛ17=q#U2UL 0`-'c76`@\,̯^09a~Χ7 @)[V: L\9cmcEk)*HAB nPII. FIpF8~M׉1Zp @1`ȓo%lRY2O ; ^yu7@"A.M,Ko Lz_ ҃FVً_p e,u(|V5gGd\qPCPH Llz(\\30^N`ٕ⌗ `Z/P@U. %Eʿ\dzon'J|y3W!rƚr44Q{s@ln7JvN )V8 N*Sd2B +J38Ul~{2J)R!ˎLqE@Gu)G:vtW%|BxBV $5F;kaPm.3tT^n M&s 65nAa[s[O&֢IUD_kA{ɸܿq2 S..a'] op%}~u7 :.D@r IQUnClA&{@/|}=)8U@cUXYKz..K[ےgS ^xԱR}] wpS k.c[I8G>[wԫx@ZBP5 s;Iz1z`0&:(j8't%Fow12;HXj-?Rο BI Sow)IK 1rݕ'O׿AgZ.~s9q='17cTtDĨjR ~;`K} vz_$a ƞ$N+oOFbny |9I>ahRlW1yuy~\)z |q^rPqEhM+`|1WHӛ 1ou,^n˲6 = `$5 `1J]U)z O'؛|o]d|+֞E@0nEC~<)@G{|۟8Nf*R[^ĘFu#rն/-5rUzv=ߦ%G;Uдqcր`DiuM2 #)&3;{`eON:$_}~p;+9KBۆ֪\G}88AVl;hIE㼖n1mJٍ¼)ߦ'V!Q:LK:V]GDad{UG:AR Nܔ p: .RWI@8tddQ<daf&ЄczjY^ۣKMyOuq7}0+si,uSK$D7KNGG'.P_̰o b9:wam2OΑSn7OorHS/rP7O%×w,J*DAET@]\Y471pYrė*UoMToeQU!l28<|>i_-x?FNh-mǓEחCKASۈD*3U?gwH/F,HRůHWb<>xEa4 \BԾ_vlO`ڮ9}uT&eOG\=mmH-TZӥ|7]1| mjZO~|I5z$ PZP? |؂t`IE _*UR `<~COOggS@  qUZ}?UyBqg˫c{4 Da3IIC9Gx}~"TS\6~$< -5y8~A M(6|Twbp,?:J)U(9PkOѵw,jZHe=ٿ#41s1!^7Z>olAV%<:/hI3iC #tWJoӈEC_RVre-M֝P(%t#ak"uz U{bQ^7z _mffgeml#y^qR~+ԇr9 b8$ Hv;TwBG}R&DiTᶳ?ѯ[y-(%œY=uWHb-Ikc3xOUBim +ҩvQޤL KO<wgU_^s`PY~q9Eks)LQ7;;ߛqC2Yn\: -cDK9 1FTK? ͺ)g屘!\VZ=e9 OggSo H-- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS o Txz{xkrwtYrjmvwuj$CGLty*sc?y =X.,=u||?S1?>{w}q>u.RL ujn\|S<D /ngwŦ.翟-b̫`NGQXƼeyԜ\=bF5?+덩~zzibn7}/enk~n.{k) ,O<'-zo0DI*Zģn$A'OwȚ"meɈ|}}0Z45x] эc:ʂDzjgIc` 0DŪ\/RO'ˏAwhs hvQB z1V_eO#q1~-7zdÓT] x9fjύ'&gx'E/RQfΔI@Fex$yޗ:~O\SP q9U+؛>O뺦:*[]rL{3n` IJ)!qZ'Rze߰2O%$=?&\\t9xRx]hGL~RO:(a͘PPD&*7T]r Bں5EX8n*Ll UuO~@`ӡŐ&&svUr1"ܾdr66+;O%'G f5#vMRc?~8gsXbέv#wQVs08Jl<o\p8W0S\ؘ@|K1{{nJ#|~" "J xF1 ,DlrY% 5R/E^kOng}m;w^ \7*.)_Mw@=.ZJlb{kmznw⽒ nmVn nmv#wmQb[WݐS#jmz fd6u>ɮ7A ',ïn>M?QՉ-HID;Ңn/$";m*|`x{(K?, =iy*_n]ktտ~eF; ܞ]" PНt=ȿOpgQLc6Ws&5 +"Q >{llZo/u6y=UmD8eS'BoUg$6voFOR+5:㓟'O4@b}Kj)ɧ46-y!Nb_8=}!8i4H׹j\{3bjg+AL+ҽaD 8JPLޟ|Lθ VM7t dX :[kwծoI•n|c]-\rݿ;dt WYCdS,M|CҺxv~wڗQ722f:yqu,jn>@º\ZH:ZӚ?IOm[Ct,F7GoŎ;N.1Xl ׏/^ȑUHhiFXj~R20fl̢Gw~)P3@rWܱͧsl1Xem y5!h~yM=e%f⺷T+YqEEU,;'ۙвZ~vXɚ1֖/M[;M72u*h5%*6hoCOF_Pa3dX5DI1RFspw8Y:\t|08sRڱsumIͦ\,nLms֗o'Βڙ)rl*&3̴?szt|{g<}`=<6; ,Hѹ:psNͭ[{z$Ϥ ΫKhN|}] D\@ frame = 0.040 0.000, 0 0.040, 4 0.080, 7 0.160, 0 0.240, 1 0.280, 2 0.320, 3 0.360, 7 0.400, 2 0.440, 1 0.480, -1 OggS$ tvorbis>OggS$ kч- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS $ p{{qiqstOnwuqxo{$2@ {_>ͧ&{t!4nH {> 1EV?5*&TKOl%̐&dI_.oOeCsҾ9r]1`&bX l bMXV[#!LgV}CK0W'B-i::ukby" @~}:[9ex${Q3'Q\F,4 ~^wLts)g8Q) Dgp|wFy}EUp<fE(<٘ojXק7t%F I>w6;}aw].WH?w\o|!: qv='>6`}cKdB6_~? 18? xj S4 (]􏴱0?OđT'WA t_6{AƓQkN:jv$P'"SKKקO=YXo[ y 1"5|6jN| ƿiY؀}&/{]|SVf'Y͏.3S]( &֝V]H<F¹Zk)A)ONb%铉vM;Իz2>\EOqC_ǤePyLP;e}Hc&q7|mIb.6*ـ "ڥBxx1!t^ULb &VZLi{k7$)@ɫ&krϭ 9iC@<> k1n5C DS{Puؐ_h ;:\[&#* K>uE8e48 ͙-v8)3|A~ʛ lu飀T,YϊwE#vzVZGw#e]$xm[KsەһSA|_Z.m;e>&9y~̙mpmVfvg Kjͷdqnwۨ+ .d^#sG0HS ;pFh6|ߛK 7Uʃ^oDScq "]V86wp>YY- "bD2kcZ<5z+eҥi(hoqY=jL-q~Iy/üQK؂xjQ?t +oS׾YB +5fDzHS@ƊJD ٠bX6olAL[>=̼8T8@"ȹϩUޗ"J|ak1R0y~7N냝b^d%%SH!w8 1FC*ckwr!s?hΜ~J*#B"K&LZs4ɦx:NwdOBgEu+j1\ |_3iO4BKoUv ^_vO|E ECإ[yXxG1Vʘ "xj⠓:QiT Aaj>quKA.{Zړ[k(v|q!/,TS]rPu&sa>m˜v-It7mg~}qS۽{jPܥӫ{ohJn*xŊ7Ȝl,{I ǫLJPkQu%B-ziv{7WH^DXf0\IfiB? e4н/ɾτؘ ӭS%3,v6gr\kge5K/f/zO~ίsl\_yK/_uO_5mӧO?>y.N'ObQiO9qZ1Fܯgׯ__I_OggS !80- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS@ 9r+smuʇ~ȫasrRuyxy{zvs4ZREQ;sl%rkm/kF zsi0|m䝻;]V(lƽ'&Ƀ?R G::Ӎm㽷2dHMծ- k0t>h5tmz;Kͨb9o%~h{*߱S`#:o>fћAYxփ+gv&}װk|R\ @Z\3BF&o_1}o}m>(Ny)(J]m> 7ZiG|r3^.,L,.|.ZfmmAUC*JIiHUFxhM0[8Gٜ4Bq|!}$28}(9;faSz Ï465Sr0gy5S85_߾0G(і>?3&nRhF/Q4*XSAۿ<̻oښiAڞy;pssEf'hu~ҳ˿c86juISRbᆟt|3m0}@ʤ^Ag#cwq\:6!N ;,Lr/m>hM59c𩆞f]Yޥ)E wNDix˹]5pT~UT>ط]^(|]7ab#{xeWTz }%Qv1wue?Ltǽ9ѿ,;Ͽɑ m 5j>][G\`C0T.%j$Hclzܐ궵o}u_̶K\suN@CD]?~Vs82݈S-*jcfn ą7uҟ< ࿷ "pvPV?W63PﯛѦ0KO [IM4 lFQb'Jam /ݚ5ijRf8JNzVX;F_Eèɽ;}$@Pڥ?h}3$-͍ۜE:j,.5K 1{p,$jMN<'𻿲?f~*܏NNH% b\n`y:aS;˾uW45IE؏Ok}mYwzjj`4hTL6ۼξm @6P@YǦD_om@>Z3ƎTR˾t6];IEO?ՈFB )66^ ^49Q5}B٬M3^?+Lř9=I L}uKǍl~96=[rGW8ma/$-y_.]4,C5㮯>=v׿ə-Ο.g~ghq#3͚C33;qbult%YGBYw  zh7Lbahŋ'3LkVJD? &v_mgmtoa܃Y4f|>z鳡kP;zԊj9iŏ$|1heof/>y_J)Zvz-}w"M{i™H i}*O޿6/Bw||>4crw;;V$nO@o'|yC?|65u&ra_Iw w8sS]އ/ڥ-zߕ ߩ^'OIsg?+A3,]/s ͍XBu; ̀i]]k8i5ﳯ Ʀf|_Ҥ\~۞"gxm7?g,ӢbvJƠ>V"08iI<ۺYtCWޘm[z}?ʜ2I>}j" unTNN=7WuZeS+{A?%K/t'6=Ojmώ^+ino\g^v;.N!ftۘ[Z )hf&0C[6£^F'?ZcOg;s.Fov'r8ufzʱzbffN0}FNLy\t&Ů/<XQL~2YZ\I֫"]l'CZ"MO.mc^YRO2;30zFܑv[VHjd ƍ[!)w#iR Bbrr1;upNѤI_b[\+1N˥pX'#s5M8YH[4{b.>v{g6hVf_tǷ=ܿy~|˷k)RBxr3 Q:O<5 Ard9I+Ď:N9e- frame = 0.040 0.000, 0 0.040, 1 0.080, 2 0.120, 1 0.160, 3 0.240, 2 0.280, 1 0.360, 2 0.400, 4 0.440, 3 0.480, 6 0.520, 5 0.560, 3 0.600, 4 0.640, 7 0.680, 4 0.720, 2 0.760, 0 0.920, -1 OggSd ̇9tvorbis>OggSd 7- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS.d L_F[azvrsu2=t0G` /Klm> vY9AtߴӽxUzfgԝ'k6͐35c_oLa{oŒnx&?ӊn\1I*c+vݨzX1$韩c-pHs'i_a6O=C>PFyנW7z|.#}ݘyՊs!eqٿ+2IkB{hn$?{6/;JcRb(pMHU`kFLhE* P7Xͳ}~utw,눨=e8JNͽ.ް6΢ϩK'ƹ"[z˱=3P~Q++<tr%ՋUjbkH[-}WSPJ홤)P@*2;?@荫>ݿ\H0 й{-{6[lC@K3uԜp)>%[M=oѦ~;qM?^%!q?.)8< VlMI"4Uw]w@B0Y0Fff0@:$ K,`\'Om Ȼ2yRU@6z/kWж R!jN\.31}ꧧ_yW Xz'vހ9&VzЋ5EZO3@>潤`w L{Xvz @?^nk* gz*UJη nDVbw8}z&:'^:ךen`yT LkP P1*Ӿ/b}NCUO8Y/w7"` 5\گ8WPYsD+Lkguo!7[wmD*'^u}`=2{%8lJgV^ u^Z;>l'@!HP=])ǒ@N=9%k!75KTq sE* Fj7DcϭDh\@ooPڿLyzKʝ\h76K œ >.2yW|{zO({Q|32j>3rPOIwb?-M Xip|䩞>ޞ7;kӊMg70]8-4y"Q gΥu?t"L46]d]{ac*;8e>]儾Ok}:`Բ%~yw>D${#f_h`(i~)1C¤Cb(I /W{)mQ1aH[񍻴O{DV o0rDBzLminҊnIsj/.c[2vM?wA. n<%Aؐͳ1Nv]FG`˅ٺAmzc@Ժ([`昱3iCFP t7Lc P.@ytW^>Qr֬9-W}$蝓V'oz(qAɓuH||wo140܆B<:Ej<uefe,'f}N*@9PAQW]^)q'2uخ(<˗͒,"Mc,T@=9qc4_G5vD6V/^| #7Bi70aYC a ݂^avK$+.{Z(.t=a?w j݃pon~/-B.du^[!E w\QG®U[:gE w^@Gb펶Px'"*XG|yhq~n+Bdϧ__m\fg^)N~` Bwt/ HDzؽ_>"r3$j)"dڛ~$>Q/5{X"a _- QF84S?_N0.2pa'axS(Cp .gWJBv\e 8fL&L@~ "?8 ~el#%_2EwTp~[ >I[^y \" .EFjKeV 5ѬXVp!5( <>)q98cP#qxU_/bdPEm4SWU,>4м$e:(l{^뻞oty/h 0 `GM=RSF J"e}9oA8ppX (9ժ&WڶTAja~KHG.2PA P@_ 7J&@{K~ʛyU-7~ co @ G~)E67*łz)esOL@d,Da$/+Sܲi#%yҗ!apZ-[F<*PX9*N UT( ^zGrٴ;ە0{v,*I j~V8j P$О)T@rY{_E`~W0q]];Q#.a;P:o|Yk*Ց8BoyV#Ƣ~ˤ8>[fDQǭOZ#mf[ꁝvR֞i53Vw̯3}XJӕGWvNѕ&ό6gZJfDZv-me`DWs,o`6 v, ^v, @# X9mټM@}Rl"C(׵ zuv^[dgNvgЭ-.!$XfdK6ZZR}V3=.'p),+M5s"}.ժXq= ^f駭ҭ[CbgsG˓ԣo/"F 6IYb Tbu7.-kH&V+wXx|թmk6wsk= 422⵫:QZkXH;׍~@')y+ܲ]#7)F8~)4]~nD~jA{%^cV>=x5 uux@B}NT7f ](MQ#Ԓm*[94hg)WFc*n7dc +&Sͺa 5; !km_qc|uor/(wbtxhc?)&C(l#G|5& ND=hoU=֝?]!["oݖ][6sg*Fh6ڶ{q[鴊LJzv#/ s䩾_P+a,_uΞ7M gW'WLM-c1n6O>ZEonLQߓ; v3{H[g$}l[fh ;+} )ڧAg ܯ6N-"4*4KHo-jl[j-+-J+{*|k?zU~Xҭ->R˧ĩZ_gs̯#RAυlԤ_.!F7Ho1<ÞPWBi6y55~!.O^yy >GqsCߡL/qr:?_ƉI\3i;&c(9.󯸯)ĈG,筸!5xv%hA'^z `H0z81*P|^y&>zIGb||nͻ"dž,!';Q=K/d bسD?βkKB.,S_gQ /`T5~mframe = 0.040 0.000, 0 0.040, 1 0.160, 3 0.240, 1 0.280, 3 0.320, 5 0.360, 3 0.440, 7 0.480, 4 0.560, 0 0.600, 1 0.640, 3 0.680, 1 0.720, 2 0.760, 1 0.800, 2 0.840, 3 0.880, 4 0.920, 5 0.960, 1 1.040, 0 1.120, -1 OggSIXc.!vorbis>OggSIn- vorbisXiph.Org libVorbis I 20040629vorbis$BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳ " ff#Cc$Dd$OggS+Ijwy_rv{xu\qqp;PBP!wc]KVlNHgnx/n#R2>¹F~i{5K܆\5%kefzyJw uuC? {պPPu:a5Z~2>7=\ޣ_c2ϗ]۽kν#G,oA|Տgv IzW^a` @jo}lV7Ųq#SAa)Cgw/Py t":ru1cl)Kx[U]^{~zPNCOaIСt8-ӻ+2M\cvvRN\5~>*|' R3)pBfvRJqZ 1EB':27╢=x(8~lM51d,*)"N(%^ ~lOO:\ h5'̀o~DB1)1 ?r{@X4ٶ<@|smm@zrG*D$n57-HQ.\ 1Ä`Qx1Ɔr94q ygw7?JxcDPn DZVMwI|V"i~$vSFN#!iU K.=Ҍm± h5V>uh{rXLZ4Xs9'cvqyfz2*!>uJ|-$1 q̯"%³wOANٱl=qEu!<=8XE|We[Tԡ8{ uJHrښf{t]Շ?܁a`@v@'ۮ3V6wQ*#TM?}a%P9T4E粊q( Ͽ @]~i߳Xrd-@{ο٪Hr%IM|;-5T*+h4s&~{u2 \ H)$$Տ 0R1O5 Sڊ, !&@scp'Q$8q~~dRڀIc{fPXVW4GC(wh2m_ѯC;J ے섮[]jÿ̺G rL '@~>W2N`/rۇx\w)@>HG_ȳgy!\6@Duc(*|OC{  K al8ts)_՟FѬvo IzS2umq0=}c ~>9.L.ӂ ƽ֓@sP fYTpt|#)p -n(2_)T8K0 ) $pF|1R:>-ᡵvz_`ފ[-?ɮ,8[dMT1n =w4dVJa"sz9ʭ $*:OSʞi[=[ vWj;5B{ޚ|דש5noJ#]Dշq{8|ҫ:q6 VT>o~L:s/'~=k|{5 M;?7׋<?{Qu.^~5׹yD@׶%TƱ %KTUmu$faGt4h9@wdN&F0\:҆o+Lۗ-f& TʕF*ë#Eʑ5nxEwzOd7Nt⦂4ۆw=qy#N/-wǦ9q+޳5z6Ȟ|靾]xu=tRsU<5,I{== ?>4"1,鼹oY8Pu"OܟվWBN%ˬɜ|r{.?J>{oIɹn=f6SIc".ԛ.\*f~% vƣ0ckTs/w٢^~6}(%L&~p 6!c B7vc{uIԒ;! '^5zoi QǺ ~_̒ ҧe$_PBՙ<+ +3 7c7m-I'G˗(O ^W 1w$&!lj=_j{fR.3eVOyUf :)ڙ"+ {]-N$ "[v^Hyг~M?zrp,5GC"H\۴0)ύce1nW/ n;BܝLaLghNdz۾yQ4ԡoWiPdU{JhS"iuWr>mcIm<9 ܱᛃ:>$Mm^މqʯ:fqVՄfzpD(:CYףjIB,{1wG]r/yciJ`@rS\yphd'PyYW|2ßh> n=D4fz$s4 ? Ё] o "ܓ7-RKv ٹ@Np3c ,fF?=_73Xsk)Lz#1 Zi[%elҷ~Q܌O_Kpt0;y%h|f8n=3پ TOD$B8ɸ$TkoC } Z>ZPJqLNT `^uƗCW`9\F{L׷:a%PyuVڽm)kqWdzo ^~[a]/\D'å".Bȩr؜Nq=.@usקTu$ @QA|p39lI❲Xm ;Ԣ|vSOggS`I^"ٛf%z΅ _:zd++۾ 9- \(@܄J b{ Fw_;-[?@.<-K^"ߒ/)"O%.y:6(*T@Ť8C\8;鶆h$3XQhe+ lt?9): cog@ dCJX.;@Eh_RR-)P_JnZ;k&`@@Ð*{YΞCx_+^e1n{cM"@\GO}[EV%g*2p9vOAz#^¢ gkW@g 05؅ x)kB t qWQ\p@r#cgfFi]~uT}8:%C|W- **> ϧl^a}}t?/n-#EhEޚӾ[|ˏH76V؃#z@8TOt @"W~ PhZ=DgR<sR`z | ԐEs $XpfR@tG}C 3I|m3}U$LߙopG&ʳP>W#e/O`OZ7h`BAENϴG`zwYwE["vfkX'epX ;3vY`-Dl漅,th۫7hP_oUc;g>'9^f>Z-Vk*ny^sx;:~}CC1Ilֱh*'܈Oҵ%M3ZPR(.F|vÉDʴh;̈闢^vc]8~B-D@V/侩zc$#b;c ֈub1jHٸp̕:s=/pu-kqM*pe N"Y \ uՎ Q ŪeYf׻~cǾ{H*˶L~p 腫NK61Ji=Eegݚ^JA>ϱJzLcZ.-ޠ1ɹcu4f~s8J *D?}zi(̓ځ($k35:dKV+֌9{'XJ^~\27]@gPoݖq>Kjۥ)'ӏ5u d-.]5j!NZQǽ"9~J[3pVDO.%~ڹ\،f]5#봿9}pN4Ɣ~Ҝ ^ Tվծn-XϯnѼq@n]_R|sPξ5S44(qI\*tDQЍNݜ`U潺+1M&@#J8v>KiC:5N?|ΤD*/އEiҮ-V͋mCoṡzms1Gډ^5vAдg`& # b^nEՓ_9xS{77OȚk051eYQq"R*>/E[s|噄,Fyk>Uoæ3xgcdGmi?'|xp{OɱcN-_ܨ_1"uBA%(b<Iuj J\ouF-<j= +@cᔉ'x>}$_n% EqYHX// East_WP1.sqf // JULY 2009 - norrin _unit = _this select 0; _group = group _unit; _random = floor (random 2); if (_random == 0) then { _waypoint0 = _group addwaypoint[getmarkerpos"EWP1",0]; _waypoint0 setwaypointtype"Move"; } else { _waypoint0 = _group addwaypoint[getmarkerpos"EWP4",0]; _waypoint0 setwaypointtype"Move"; }; _waypoint1 = _group addwaypoint[getmarkerpos"EWP3",0]; _waypoint1 setwaypointtype"Move"; _waypoint2 = _group addwaypoint[getmarkerpos"EWP2",0]; _waypoint2 setwaypointtype"Move"; _waypoint3 = _group addwaypoint[getmarkerpos"ES1",0]; _waypoint3 setwaypointtype"Move"; _waypoint4 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint4 setwaypointtype"SAD"; // etc// East_WP2.sqf // JULY 2009 - norrin _unit = _this select 0; _group = group _unit; _random = floor (random 2); if (_random == 0) then { _waypoint0 = _group addwaypoint[getmarkerpos"EWP2",0]; _waypoint0 setwaypointtype"Move"; } else { _waypoint0 = _group addwaypoint[getmarkerpos"EWP4",0]; _waypoint0 setwaypointtype"Move"; }; _waypoint1 = _group addwaypoint[getmarkerpos"EWP3",0]; _waypoint1 setwaypointtype"Move"; _waypoint2 = _group addwaypoint[getmarkerpos"EWP1",0]; _waypoint2 setwaypointtype"Move"; _waypoint3 = _group addwaypoint[getmarkerpos"EWP5",0]; _waypoint3 setwaypointtype"Move"; _waypoint4 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint4 setwaypointtype"SAD"; // etc// East_WP3.sqf // JULY 2009 - norrin _unit = _this select 0; _group = group _unit; _random = floor (random 2); if (_random == 0) then { _waypoint0 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint0 setwaypointtype"Move"; } else { _waypoint0 = _group addwaypoint[getmarkerpos"ES1",0]; _waypoint0 setwaypointtype"Move"; }; _waypoint1 = _group addwaypoint[getmarkerpos"EWP5",0]; _waypoint1 setwaypointtype"MOVE"; _waypoint2 = _group addwaypoint[getmarkerpos"EWP4",0]; _waypoint2 setwaypointtype"MOVE"; _waypoint3 = _group addwaypoint[getmarkerpos"EWP6",0]; _waypoint3 setwaypointtype"MOVE"; _waypoint4 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint4 setwaypointtype"SAD"; // etc// East_WP4.sqf // JULY 2009 - norrin _unit = _this select 0; _group = group _unit; _random = floor (random 2); if (_random == 0) then { _waypoint0 = _group addwaypoint[getmarkerpos"EWP5",0]; _waypoint0 setwaypointtype"Move"; } else { _waypoint0 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint0 setwaypointtype"Move"; }; _waypoint1 = _group addwaypoint[getmarkerpos"EWP6",0]; _waypoint1 setwaypointtype"MOVE"; _waypoint2 = _group addwaypoint[getmarkerpos"ES1",0]; _waypoint2 setwaypointtype"MOVE"; _waypoint3 = _group addwaypoint[getmarkerpos"EWP5",0]; _waypoint3 setwaypointtype"MOVE"; _waypoint4 = _group addwaypoint[getmarkerpos"EWP6",0]; _waypoint4 setwaypointtype"SAD"; // etc// reinforceWP.sqf // JULY 2009 - norrin if (!isServer) exitWith {}; _unit = _this select 0; _group = group _unit; _units = []; if (vehicle _unit != _unit) then { _units = units _group; {unassignVehicle (vehicle _x); _x action ["GET OUT", vehicle _x];} forEAch _units; _units allowGetIn false; } sleep 2; _waypoint0 = _group addwaypoint[getmarkerpos"EWP7",0]; _waypoint0 setwaypointtype"SAD"; // etc4v