Files
2025-09-29 00:52:08 +02:00

1225 lines
42 KiB
Python
Executable File

// Checks for player flying under bridges
//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_entity.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "brains.sch"
USING "script_player.sch"
USING "flow_public_core.sch"
USING "replay_public.sch"
USING "mission_stat_public.sch"
USING "commands_recording.sch"
USING "achievement_public.sch"
USING "flyUnderBridges.sch"
ENUM underBridgeStageFlag
waitingForInteraction = 0,
checkForExit
ENDENUM
underBridgeStageFlag underBridgeStage = waitingForInteraction
ENUM splashStageFlag
loadScaleform,
printSplash,
animateSplash,
cleanupSplash
ENDENUM
splashStageFlag splashStage = loadScaleform
BOOL bPrintSplash
SCALEFORM_INDEX sfMovie
INT currentBridge, iPrintedCompletion
BOOL bEnteredArea1, bEnteredArea2, bExitViaArea1, bExitViaArea2, bPassingThroughAreas, bIsKnife
VECTOR vTriggerPoint[SP_NUMBER_OF_CHALLENGES]
FLOAT fStartChecking = 200*200
VECTOR vArea1Min, vArea1Max
VECTOR vArea2Min, vArea2Max
FLOAT fAreaWidth
VECTOR vInput
#if IS_DEBUG_BUILD
BOOL bCheckBridgeCompletion, bBlipAllBridges, bAddBitFieldWidgets, bBitFieldWidgetsCreated
WIDGET_GROUP_ID widgetGroup
BLIP_INDEX blipBridge[SP_NUMBER_OF_CHALLENGES]
#ENDIF
PROC SETUP_BRIDGE_INFO()
vTriggerPoint[SP_LA_RIVER_01] = <<1083, -231, 60>>
vTriggerPoint[SP_LA_RIVER_02] = <<1024, -325, 60>>
//Aqueduct Pipes
vTriggerPoint[SP_LA_RIVER_03] = <<910, -401, 43>>
vTriggerPoint[SP_LA_RIVER_04] = <<721, -457, 26>>
vTriggerPoint[SP_LA_RIVER_05] = <<643, -579, 26>>
vTriggerPoint[SP_LA_RIVER_06] = <<590, -851, 26>>
vTriggerPoint[SP_LA_RIVER_07] = <<590, -1023, 16>>
vTriggerPoint[SP_LA_RIVER_08] = <<582, -1205, 24>>
//Aqueduct Rail Track
vTriggerPoint[SP_LA_RIVER_09] = <<608, -1335, 16>>
vTriggerPoint[SP_LA_RIVER_10] = <<640, -1434, 16>>
vTriggerPoint[SP_LA_RIVER_11] = <<671, -1742, 20>>
vTriggerPoint[SP_LA_RIVER_12] = <<651, -2046, 16>>
vTriggerPoint[SP_LA_RIVER_13] = <<603, -2505, 9>>
vTriggerPoint[SP_LA_RIVER_14] = <<673, -2582, 4>>
vTriggerPoint[SP_LA_RIVER_15] = <<728, -2594, 10>>
vTriggerPoint[SP_LA_RIVER_16] = <<794, -2624, 27>>
vTriggerPoint[SP_HIGHWAY_CS3] = <<-2663, 2594, 7.5>>
vTriggerPoint[SP_DOUBLEARCH_CS3] = <<-1902, 4617, 30>>
vTriggerPoint[SP_RAILARCH_CS1] = <<-513, 4427, 40>>
vTriggerPoint[SP_RAILLOW_CS4] = <<126, 3366, 40>>
vTriggerPoint[SP_ROADLOW_CS4] = <<143, 3418, 36>>
vTriggerPoint[SP_RAILLOW_CS2] = <<2822, 4978, 40>>
vTriggerPoint[SP_RAILLOW_CS3] = <<-162, 4249, 40>>
vTriggerPoint[SP_MADISON_CS3] = <<-408, 2964, 20>>
vTriggerPoint[SP_ROADLOW_CS6] = <<-181, 2862, 38>>
vTriggerPoint[SP_RAILLOW_CH3] = <<2558, 2201, 24>>
vTriggerPoint[SP_SEAARCH_CH3] = <<2950, 803, 8>>
vTriggerPoint[SP_RAILHIGH_CH3] = <<2369, -409, 80>>
vTriggerPoint[SP_RAILFREE_CH3] = <<1906, -755, 84 >>
vTriggerPoint[SP_ROADSUSP_PO1] = <<-403, -2333, 40>>
vTriggerPoint[SP_RAILLOW_CH1] = <<-1429, 2649, 10>>
vTriggerPoint[SP_RAILLOW_PO1] = <<219, -2315, 5>>
vTriggerPoint[SP_ROADLOW_PO1] = <<350, -2315, 5>>
vTriggerPoint[SP_KNIFE_SM01] = <<-1848, -333, 75>>
vTriggerPoint[SP_KNIFE_2] = <<-693, -608, 69>>//<<-794, -595, 65>>
vTriggerPoint[SP_KNIFE_3] = <<-1461, -582, 53>>//<<-890, -1261, 40>>
vTriggerPoint[SP_KNIFE_4] = <<-1553, -546, 59>>//<<-969, -1304, 40>>
//Chemical Vats
vTriggerPoint[SP_DOMES_PO1] = <<338, -2758, 23>>
vTriggerPoint[SP_RAILROAD_CS2] = <<1985, 6201, 53>>
vTriggerPoint[SP_HELI_UNDER] = <<-713, -1538, 13>>
vTriggerPoint[SP_HELI_OVER] = <<-659, -1518, 13>>
vTriggerPoint[SP_CANAL_TRACK] = <<-620, -1502, 16>>
vTriggerPoint[SP_SPAGH_LOW] = <<-445, -1575, 26>>
vTriggerPoint[SP_CHINOZ_BRIDGE] = <<-373, -1680, 19>>
vTriggerPoint[SP_SC1_ARCH_BRIDGE] = <<-212, -1805, 29>>
vTriggerPoint[SP_LOW_CAST_IRON] = <<47, -2040, 18>>
vTriggerPoint[SP_CS_FREEWAY] = <<-3080, 766, 25>>
vTriggerPoint[SP_CH1_RIVER] = <<-1478, 2400, 20>>
vTriggerPoint[SP_CH3_OVERPASS] = <<2308, 1124, 78>>
vTriggerPoint[SP_CH3_RAILBRIDGE] = <<2349, 1174, 79>>
vTriggerPoint[SP_KNIFE_5] = <<-1186, -365, 46>>
vTriggerPoint[SP_KNIFE_6] = <<-916, -407, 93>>
vTriggerPoint[SP_KNIFE_7] = <<-726, 235, 105>>
vTriggerPoint[SP_KNIFE_8] = <<-774, 286, 112>>
vTriggerPoint[SP_KNIFE_9] = <<271, 134, 125>>
vTriggerPoint[SP_KNIFE_10] = <<377, -28, 125>>
vTriggerPoint[SP_KNIFE_11] = <<121, -703, 150>>
vTriggerPoint[SP_KNIFE_12] = <<-204, -784, 74>>
vTriggerPoint[SP_KNIFE_13] = <<-287, -774, 72>>
vTriggerPoint[SP_KNIFE_14] = <<-272, -824, 71>>
vTriggerPoint[SP_KNIFE_15] = <<-230, -723, 80>>
vTriggerPoint[SP_BRIDGE_47] = <<1822, 2044, 62>>
vTriggerPoint[SP_BRIDGE_48] = <<2410, 2907, 44>>
vTriggerPoint[SP_BRIDGE_49] = <<2686, 4858, 36>>
vTriggerPoint[SP_BRIDGE_50] = <<-1046, 4751, 244>>
vTriggerPoint[SP_EXTRA_SUSP_1] = <<-213, -2463, 38>>
vTriggerPoint[SP_EXTRA_SUSP_2] = <<-597, -2192, 38>>
vTriggerPoint[SP_FREEWAY_1] = <<1036, -980, 41>>
vTriggerPoint[SP_FREEWAY_2] = <<980, -837, 42>>
//vTriggerPoint[SP_FREEWAY_3] = <<-597, -2192, 38>>
vTriggerPoint[SP_FREEWAY_3] = <<1208, -1173, 38>>
ENDPROC
PROC GET_CURRENT_BRIDGE_INFO(INT bridgeIndex)
SWITCH bridgeIndex
CASE SP_LA_RIVER_01
vArea1Min = <<1103.013916,-233.037369,56.130039>>
vArea1Max = <<1073.190918,-214.847794,66.059296>>
fAreaWidth = 30
vArea2Min = <<1093.588623,-248.592606,56.886391>>
vArea2Max = <<1063.774414,-230.142532,66.678467>>
BREAK
CASE SP_LA_RIVER_02
vArea1Min = <<1044.181885,-324.590363,49.334076>>
vArea1Max = <<1016.709717,-307.738251,64.813431>>
fAreaWidth = 30
vArea2Min = <<1007.983154,-320.615875,48.454296>>
vArea2Max = <<1036.006714,-337.420410,64.480797>>
BREAK
CASE SP_LA_RIVER_03
vArea1Min = <<916.598999,-419.878204,35.627480>>
vArea1Max = <<910.379333,-383.882568,47.543388>>
fAreaWidth = 7
vArea2Min = <<912.136169,-420.516144,35.380337>>
vArea2Max = <<906.895203,-384.677887,47.249256>>
BREAK
CASE SP_LA_RIVER_04
vArea1Min = <<757.718872,-472.923950,19.253498>>
vArea1Max = <<696.593628,-420.211456,35.460842>>
fAreaWidth = 20.75
vArea2Min = <<744.911438,-480.737335,19.065138>>
vArea2Max = <<682.561401,-429.553345,37.026600>>
BREAK
CASE SP_LA_RIVER_05
vArea1Min = <<680.367676,-581.179199,14.214504>>
vArea1Max = <<599.810059,-528.305908,33.409580>>
fAreaWidth = 45.000000
vArea2Min = <<667.369202,-610.535645,13.854013>>
vArea2Max = <<582.843262,-556.781799,33.403355>>
BREAK
CASE SP_LA_RIVER_06
vArea1Min = <<644.249695,-844.750427,12.367073>>
vArea1Max = <<526.860840,-845.252075,35.989601>>
fAreaWidth = 25.000000
vArea2Min = <<644.365906,-859.387756,12.596766>>
vArea2Max = <<526.861511,-857.520752,36.328571>>
BREAK
CASE SP_LA_RIVER_07
vArea1Min = <<634.971985,-1011.640198,10.925943>>
vArea1Max = <<539.650085,-1024.017090,35.958515>>
fAreaWidth = 25.000000
vArea2Min = <<634.961243,-1029.123047,10.618461>>
vArea2Max = <<543.489319,-1038.261475,35.959301>>
BREAK
CASE SP_LA_RIVER_08
vArea1Min = <<645.722290,-1191.215332,10.451977>>
vArea1Max = <<524.301758,-1197.166870,39.611725>>
fAreaWidth = 50.000000
vArea2Min = <<645.722290,-1228.966431,10.980150>>
vArea2Max = <<521.937866,-1217.607300,39.471722>>
BREAK
CASE SP_LA_RIVER_09
vArea1Min = <<642.121643,-1295.730103,9.005976>>
vArea1Max = <<568.170166,-1375.350830,20.129887>>
fAreaWidth = 7.000000
vArea2Min = <<644.777222,-1298.168335,9.128529>>
vArea2Max = <<571.634155,-1378.644409,20.358023>>
BREAK
CASE SP_LA_RIVER_10
vArea1Min = <<686.567505,-1444.709839,9.065001>>
vArea1Max = <<598.932800,-1444.437988,25.688457>>
fAreaWidth = 25.000000
vArea2Min = <<682.302673,-1429.871948,9.890836>>
vArea2Max = <<593.821655,-1432.995483,25.600724>>
BREAK
CASE SP_LA_RIVER_11
vArea1Min = <<718.761658,-1734.312866,9.082874>>
vArea1Max = <<615.001709,-1725.897339,27.545851>>
fAreaWidth = 30.000000
vArea2Min = <<717.535461,-1748.645630,9.363478>>
vArea2Max = <<614.217957,-1734.847534,27.357079>>
BREAK
CASE SP_LA_RIVER_12
vArea1Min = <<694.316467,-2049.805664,0.009695>>
vArea1Max = <<618.684509,-2040.013672,25.834118>>
fAreaWidth = 30.000000
vArea2Min = <<693.183594,-2063.225098,0.429037>>
vArea2Max = <<607.594360,-2055.326416,26.918158>>
BREAK
CASE SP_LA_RIVER_13
vArea1Min = <<642.667053,-2494.551270,0.468485>>
vArea1Max = <<570.180664,-2513.958740,11.787938>>
fAreaWidth = 20.000000
vArea2Min = <<647.033875,-2506.202148,0.583701>>
vArea2Max = <<571.141541,-2522.975342,10.450453>>
BREAK
CASE SP_LA_RIVER_14
vArea1Min = <<691.823547,-2558.218506,0.363352>>
vArea1Max = <<645.886292,-2600.311279,9.898791>>
fAreaWidth = 10.250000
vArea2Min = <<695.792847,-2561.033691,0.346731>>
vArea2Max = <<656.391907,-2601.971680,9.643657>>
BREAK
CASE SP_LA_RIVER_15
vArea1Min = <<723.625427,-2562.170654,0.255647>>
vArea1Max = <<720.751953,-2619.769531,15.732105>>
fAreaWidth = 20.000000
vArea2Min = <<735.764954,-2561.935059,0.311182>>
vArea2Max = <<736.121399,-2618.766602,15.790609>>
BREAK
CASE SP_LA_RIVER_16
vArea1Min = <<891.438660,-2603.120117,0>>
vArea1Max = <<704.493164,-2634.793213,45>>
fAreaWidth = 20.000000
vArea2Min = <<893.257813,-2616.235107,0>>
vArea2Max = <<707.726135,-2647.695557,45>>
BREAK
CASE SP_HIGHWAY_CS3
vArea1Min = <<-2669.586914,2491.959961,2.043799>>
vArea1Max = <<-2617.764648,2841.594727,14.082197>>
fAreaWidth = 26.500000
vArea2Min = <<-2687.605713,2494.868164,2.608733>>
vArea2Max = <<-2637.084717,2846.875244,14.159884>>
BREAK
CASE SP_DOUBLEARCH_CS3
vArea1Min = <<-1986.172607,4521.798828,0>>
vArea1Max = <<-1809.902588,4699.551270,53.508797>>
fAreaWidth = 17.000000
vArea2Min = <<-1995.668091,4531.259277,0>>
vArea2Max = <<-1817.543457,4708.394531,53.509171>>
BREAK
CASE SP_RAILARCH_CS1
vArea1Min = <<-526.026489,4472.442383,0>>
vArea1Max = <<-505.571442,4335.724609,86.733109>>
fAreaWidth = 10.000000
vArea2Min = <<-519.928101,4476.345703,0>>
vArea2Max = <<-500.731323,4336.389160,86.712891>>
BREAK
CASE SP_RAILLOW_CS4
vArea1Min = <<98.161499,3384.489014,45.451691>>
vArea1Max = <<154.974030,3350.694092,30.033585>>
fAreaWidth = 8.000000
vArea2Min = <<152.680176,3346.793457,45.021557>>
vArea2Max = <<95.571877,3380.090576,30.432842>>
BREAK
CASE SP_ROADLOW_CS4
vArea1Min = <<147.860611,3406.796143,38.036716>>
vArea1Max = <<126.132935,3416.926758,30.029865>>
fAreaWidth = 14.50000
vArea2Min = <<130.091629,3425.417236,38.056725>>
vArea2Max = <<151.870346,3415.391357,30.057804>>
BREAK
CASE SP_RAILLOW_CS2
vArea1Min = <<2830.972168,4967.139648,34.560127>>
vArea1Max = <<2818.718750,4992.298340,51.290901>>
fAreaWidth = 10.000000
vArea2Min = <<2826.766846,4964.185059,34.106361>>
vArea2Max = <<2814.216309,4989.983398,51.218491>>
BREAK
CASE SP_RAILLOW_CS3
vArea1Min = <<-151.576416,4264.416992,31.047348>>
vArea1Max = <<-193.196228,4224.604004,43.872551>>
fAreaWidth = 10.000000
vArea2Min = <<-148.384186,4261.071289,31.574089>>
vArea2Max = <<-190.471878,4222.076172,43.954426>>
BREAK
CASE SP_MADISON_CS3
vArea1Min = <<-426.691864,2964.271973,14.848002>>
vArea1Max = <<-396.229797,2959.277588,23.506374>>
fAreaWidth = 7.000000
vArea2Min = <<-425.028290,2967.861328,15.226991>>
vArea2Max = <<-395.607269,2962.606689,24.380791>>
BREAK
CASE SP_ROADLOW_CS6
vArea1Min = <<-192.341370,2864.916260,30.725950>>
vArea1Max = <<-170.150940,2857.128174,43.941822>>
fAreaWidth = 10.000000
vArea2Min = <<-192.012863,2871.602539,29.999426>>
vArea2Max = <<-169.595749,2863.838379,44.032505>>
BREAK
CASE SP_RAILLOW_CH3
vArea1Min = <<2539.185059,2228.771729,18.610205>>
vArea1Max = <<2574.373291,2169.401367,27.265978>>
fAreaWidth = 10.000000
vArea2Min = <<2543.707520,2231.401611,18.331003>>
vArea2Max = <<2578.078857,2171.583740,27.260571>>
BREAK
CASE SP_SEAARCH_CH3
vArea1Min = <<2954.086670,815.720886,0.037901>>
vArea1Max = <<2933.189209,796.468811,12.983917>>
fAreaWidth = 35.000000
vArea2Min = <<2966.122559,806.888855,0.544056>>
vArea2Max = <<2950.801270,786.781555,11.745959>>
BREAK
CASE SP_RAILHIGH_CH3
vArea1Min = <<2329.672607,-459.664764,70.242767>>
vArea1Max = <<2413.383789,-361.218842,91.778862>>
fAreaWidth = 12.000000
vArea2Min = <<2324.751953,-455.523773,70.251450>>
vArea2Max = <<2407.409424,-356.200317,91.430832>>
BREAK
CASE SP_RAILFREE_CH3
vArea1Min = <<1943.428467,-753.250977,80.179047>>
vArea1Max = <<1850.364502,-760.958740,93.025215>>
fAreaWidth = 7.000000
vArea2Min = <<1943.365967,-758.287048,80.322914>>
vArea2Max = <<1851.353516,-765.180664,92.935455>>
BREAK
CASE SP_ROADSUSP_PO1
vArea1Min = <<-655.146729,-2138.093506,-0.339008>>
vArea1Max = <<-146.027893,-2493.724365,54.675671>>
fAreaWidth = 47.750000
vArea2Min = <<-672.221313,-2162.674561,-0.082912>>
vArea2Max = <<-163.555618,-2519.058105,54.722488>>
BREAK
CASE SP_RAILLOW_CH1
vArea1Min = <<-1483.000366,2691.427734,-10>>
vArea1Max = <<-1377.168213,2600.768799,15.955276>>
fAreaWidth = 12.000000
vArea2Min = <<-1478.152100,2696.687988,-10>>
vArea2Max = <<-1378.503174,2608.697754,15.609236>>
BREAK
CASE SP_RAILLOW_PO1
vArea1Min = <<222.151871,-2343.486572,0.039199>>
vArea1Max = <<222.684906,-2297.406982,7.088753>>
fAreaWidth = 12.000000
vArea2Min = <<216.959015,-2343.486572,0.207734>>
vArea2Max = <<216.602036,-2295.445068,7.424279>>
BREAK
CASE SP_ROADLOW_PO1
vArea1Min = <<346.462158,-2244.374023,0.159779>>
vArea1Max = <<346.834717,-2389.590576,7.852059>>
fAreaWidth = 20.000000
vArea2Min = <<359.609039,-2244.467773,0.129684>>
vArea2Max = <<355.405426,-2390.258301,7.080691>>
BREAK
CASE SP_KNIFE_SM01
vArea1Min = <<-1859.679932,-322.635742,56.163681>>
vArea1Max = <<-1836.613647,-335.414124,96.116104>>
fAreaWidth = 7.500000
vArea2Min = <<-1860.269775,-327.863434,57.542999>>
vArea2Max = <<-1837.270874,-339.222717,95.693253>>
BREAK
CASE SP_KNIFE_2
vArea1Min = <<-680.263245,-600.817993,69.112892>>
vArea1Max = <<-706.661255,-600.751526,30.476036>>
fAreaWidth = 31.500000
vArea2Min = <<-680.607727,-618.365845,69.274963>>
vArea2Max = <<-706.359619,-618.238464,30.312347>>
BREAK
CASE SP_KNIFE_3
vArea1Min = <<-1468.096069,-591.715759,67.055176>>
vArea1Max = <<-1454.699951,-573.451782,29.567360>>
fAreaWidth = 11.750000
vArea2Min = <<-1474.902954,-591.121460,67.080910>>
vArea2Max = <<-1457.173096,-568.131592,29.440590>>
BREAK
CASE SP_KNIFE_4
vArea1Min = <<-1544.957764,-537.147522,72.443474>>
vArea1Max = <<-1564.616211,-551.182922,32.861633>>
fAreaWidth = 11.750000
vArea2Min = <<-1541.007935,-541.549377,71.619720>>
vArea2Max = <<-1561.218872,-555.868042,32.927902>>
BREAK
CASE SP_DOMES_PO1
vArea1Min = <<333.210785,-2727.273682,20.716625>>
vArea1Max = <<333.429688,-2791.608887,41.990227>>
fAreaWidth = 20.000000
vArea2Min = <<343.112732,-2727.235840,20.236126>>
vArea2Max = <<343.667816,-2791.602295,41.379284>>
BREAK
CASE SP_RAILROAD_CS2
vArea1Min = <<1928.071289,6228.355469,43.493977>>
vArea1Max = <<2039.882324,6167.397461,55.464050>>
fAreaWidth = 13.000000
vArea2Min = <<1931.820190,6235.633789,43.373817>>
vArea2Max = <<2039.597534,6176.525391,55.255970>>
BREAK
CASE SP_HELI_UNDER
vArea1Min = <<-736.430908,-1590.920776,10.808919>>
vArea1Max = <<-710.811035,-1516.349487,-0.098598>>
fAreaWidth = 15.000000
vArea2Min = <<-727.230713,-1585.221191,11.780270>>
vArea2Max = <<-700.020142,-1511.782593,-0.341655>>
BREAK
CASE SP_HELI_OVER
vArea1Min = <<-686.377502,-1548.552612,12.337475>>
vArea1Max = <<-669.328979,-1507.062866,-0.788618>>
fAreaWidth = 25.000000
vArea2Min = <<-654.203003,-1536.145996,9.191055>>
vArea2Max = <<-645.995422,-1500.219360,-2.406948>>
BREAK
CASE SP_CANAL_TRACK
vArea1Min = <<-624.234375,-1537.045288,12.601933>>
vArea1Max = <<-622.174927,-1472.876587,-0.292606>>
fAreaWidth = 8.000000
vArea2Min = <<-615.400330,-1536.650024,12.402705>>
vArea2Max = <<-619.738525,-1472.937134,-0.243267>>
BREAK
CASE SP_SPAGH_LOW
vArea1Min = <<-492.505707,-1632.457153,24.330700>>
vArea1Max = <<-418.208801,-1487.452148,0>>
fAreaWidth = 25.000000
vArea2Min = <<-486.201599,-1636.094971,24.208052>>
vArea2Max = <<-398.764832,-1490.440308,0>>
BREAK
CASE SP_CHINOZ_BRIDGE
vArea1Min = <<-359.354095,-1639.692749,13.134555>>
vArea1Max = <<-388.495483,-1690.945190,-0.183164>>
fAreaWidth = 25.000000
vArea2Min = <<-378.151825,-1705.659668,12.471957>>
vArea2Max = <<-348.959106,-1654.411011,0.193478>>
BREAK
CASE SP_SC1_ARCH_BRIDGE
vArea1Min = <<-243.443573,-1814.622803,25.694649>>
vArea1Max = <<-183.998734,-1780.644653,-0.085802>>
fAreaWidth = 25.000000
vArea2Min = <<-235.131912,-1822.093750,25.865416>>
vArea2Max = <<-175.510468,-1788.274780,-0.506062>>
BREAK
CASE SP_LOW_CAST_IRON
vArea1Min = <<84.555367,-2046.158813,13.307674>>
vArea1Max = <<17.931641,-2045.151855,-0.031946>>
fAreaWidth = 25.000000
vArea2Min = <<17.907875,-2035.772949,12.627057>>
vArea2Max = <<84.572067,-2034.183838,0.048385>>
BREAK
CASE SP_CS_FREEWAY
vArea1Min = <<-3064.972656,780.167725,18.706421>>
vArea1Max = <<-3093.957520,757.288635,29.196960>>
fAreaWidth = 5.000000
vArea2Min = <<-3063.053711,778.016541,18.671673>>
vArea2Max = <<-3092.174561,754.915588,29.145802>>
BREAK
CASE SP_CH1_RIVER
vArea1Min = <<-1471.516602,2406.815186,2.485338>>
vArea1Max = <<-1489.422119,2404.390381,21.769384>>
fAreaWidth = 15.000000
vArea2Min = <<-1468.889404,2400.668213,2.603960>>
vArea2Max = <<-1487.055054,2398.087402,21.837677>>
BREAK
CASE SP_CH3_OVERPASS
vArea1Min = <<2326.570068,1096.030518,76.314575>>
vArea1Max = <<2290.332031,1136.130737,58.857056>>
fAreaWidth = 21.000000
vArea2Min = <<2334.453369,1103.066772,76.266029>>
vArea2Max = <<2297.845703,1142.896851,58.842430>>
BREAK
CASE SP_CH3_RAILBRIDGE
vArea1Min = <<2379.442139,1150.775513,58.796318>>
vArea1Max = <<2327.657959,1212.366333,72.833298>>
fAreaWidth = 12.000000
vArea2Min = <<2374.063721,1146.282104,58.833305>>
vArea2Max = <<2320.894531,1209.596069,72.792992>>
BREAK
CASE SP_KNIFE_5
vArea1Min = <<-1179.405151,-355.255432,56.530029>>
vArea1Max = <<-1198.064087,-357.836304,35.355511>>
fAreaWidth = 12.500000
vArea2Min = <<-1178.385254,-361.878418,56.150814>>
vArea2Max = <<-1197.103760,-364.700439,36.494755>>
BREAK
CASE SP_KNIFE_6
vArea1Min = <<-921.384583,-384.939972,137.018127>>
vArea1Max = <<-912.432373,-429.228973,36.701126>>
fAreaWidth = 16.000000
vArea2Min = <<-914.165771,-387.944366,137.079361>>
vArea2Max = <<-906.253357,-424.691040,47.118820>>
BREAK
CASE SP_KNIFE_7
vArea1Min = <<-740.256409,246.452850,132.292191>>
vArea1Max = <<-718.360229,201.004150,80.955711>>
fAreaWidth = 20.000000
vArea2Min = <<-726.642883,253.067642,132.331940>>
vArea2Max = <<-705.585815,210.433563,78.705727>>
BREAK
CASE SP_KNIFE_8
vArea1Min = <<-771.206787,268.272888,132.168915>>
vArea1Max = <<-778.341675,313.114807,84.270538>>
fAreaWidth = 16.000000
vArea2Min = <<-770.803528,310.862518,137.416138>>
vArea2Max = <<-763.068054,269.044037,83.314743>>
BREAK
CASE SP_KNIFE_9
vArea1Min = <<259.220520,135.414612,136.708267>>
vArea1Max = <<279.239624,128.137939,100.823303>>
fAreaWidth = 16.000000
vArea2Min = <<261.969360,142.967636,136.688919>>
vArea2Max = <<281.720337,134.955078,100.770416>>
BREAK
CASE SP_KNIFE_10
vArea1Min = <<393.547974,-30.871658,152.663452>>
vArea1Max = <<369.962189,-23.884607,88.357758>>
fAreaWidth = 8.000000
vArea2Min = <<390.535797,-36.088818,152.781250>>
vArea2Max = <<368.127472,-28.818884,88.694473>>
BREAK
CASE SP_KNIFE_11
vArea1Min = <<114.313911,-648.429749,261.848785>>
vArea1Max = <<131.078156,-733.768372,39.343933>>
fAreaWidth = 20.000000
vArea2Min = <<124.846703,-646.657532,261.848785>>
vArea2Max = <<140.050247,-737.427002,39.349304>>
BREAK
CASE SP_KNIFE_12
vArea1Min = <<-215.918991,-823.843628,126.022392>>
vArea1Max = <<-193.223679,-761.778137,27.913818>>
fAreaWidth = 20.000000
vArea2Min = <<-225.396957,-820.393738,126.081223>>
vArea2Max = <<-202.943253,-758.257019,27.477341>>
BREAK
CASE SP_KNIFE_13
vArea1Min = <<-296.472504,-802.081543,95.401085>>
vArea1Max = <<-278.135193,-747.784119,50.400459>>
fAreaWidth = 20.000000
vArea2Min = <<-305.460236,-798.836914,95.481941>>
vArea2Max = <<-285.737640,-745.095886,49.576508>>
BREAK
CASE SP_KNIFE_14
vArea1Min = <<-292.303436,-823.356873,95.376205>>
vArea1Max = <<-258.599060,-835.563232,27.979462>>
fAreaWidth = 20.000000
vArea2Min = <<-288.920624,-814.022034,95.375565>>
vArea2Max = <<-255.211594,-826.256042,27.737495>>
BREAK
CASE SP_KNIFE_15
vArea1Min = <<-256.358856,-714.783752,110.161659>>
vArea1Max = <<-212.905441,-730.532043,32.219460>>
fAreaWidth = 20.000000
vArea2Min = <<-253.772324,-705.663208,110.173569>>
vArea2Max = <<-210.058777,-722.674805,32.465363>>
BREAK
CASE SP_BRIDGE_47
vArea1Min = <<1808.214478,1949.245850,71.737068>>
vArea1Max = <<1837.906250,2127.283203,52.804909>>
fAreaWidth = 9.750000
vArea2Min = <<1802.785889,1950.261719,71.740021>>
vArea2Max = <<1831.994385,2127.432617,52.838928>>
BREAK
CASE SP_BRIDGE_48
vArea1Min = <<2388.732910,2931.940918,46.626808>>
vArea1Max = <<2426.680664,2883.066162,36.215237>>
fAreaWidth = 10.000000
vArea2Min = <<2392.546631,2934.867188,46.626797>>
vArea2Max = <<2430.332520,2885.908447,36.281479>>
BREAK
CASE SP_BRIDGE_49
vArea1Min = <<2700.055664,4836.380859,42.078537>>
vArea1Max = <<2685.673340,4893.380371,30.908669>>
fAreaWidth = 20.750000
vArea2Min = <<2685.671875,4821.652832,42.184708>>
vArea2Max = <<2672.812256,4880.356445,31.133106>>
BREAK
CASE SP_BRIDGE_50
vArea1Min = <<-1053.446411,4766.245117,234.325119>>
vArea1Max = <<-1040.263428,4737.156738,204.491638>>
fAreaWidth = 5.000000
vArea2Min = <<-1051.414307,4767.192871,234.429306>>
vArea2Max = <<-1037.954224,4738.354492,204.528152>>
BREAK
CASE SP_FREEWAY_1
vArea1Min = <<1001.145081,-987.113770,42.624561>>
vArea1Max = <<1078.645020,-963.743530,28.933376>>
fAreaWidth = 14.000000
vArea2Min = <<1002.864197,-992.898621,42.624561>>
vArea2Max = <<1080.483643,-969.903381,28.883770>>
BREAK
CASE SP_FREEWAY_2
vArea1Min = <<952.504150,-847.661499,43.018440>>
vArea1Max = <<1021.093079,-844.506287,29.719673>>
fAreaWidth = 20.000000
vArea2Min = <<945.549438,-835.977661,43.156578>>
vArea2Max = <<1016.363892,-835.386108,29.729702>>
BREAK
CASE SP_FREEWAY_3
vArea1Min = <<1212.476685,-1183.012573,46.473896>>
vArea1Max = <<1267.188721,-1161.996704,32.482971>>
fAreaWidth = 40.000000
vArea2Min = <<1206.009644,-1157.062988,47.936985>>
vArea2Max = <<1258.374023,-1140.679932,32.429031>>
BREAK
ENDSWITCH
ENDPROC
PROC RESET_BRIDGE_CHECKS()
bEnteredArea1 = FALSE
bEnteredArea2 = FALSE
bExitViaArea1 = FALSE
bExitViaArea2 = FALSE
bPassingThroughAreas = FALSE
underBridgeStage = waitingForInteraction
ENDPROC
FUNC INT CHECK_BRIDGE_COMPLETION()
INT completeCount, completeKnives, completeBridges
completeBridges = GET_NUMBER_OF_COMPLETED_UNDER_BRIDGES()
completeKnives = GET_NUMBER_OF_COMPLETED_KNIFE_FLIGHTS()
//Update achievement progress
IF (completeBridges+completeKnives)>0
SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH29),completeBridges+completeKnives)
ENDIF
IF bIsKnife
completeCount = completeKnives
IF completeKnives >= 8 //NUMBER_OF_KNIVES/2
PRINTLN("<flyUnderBridges> - At least half of all knives are complete, award achievement.")
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_KNFFLT)
ELSE
PRINTLN("<flyUnderBridges> - ", completeKnives, " knives are complete, no achievement yet.")
ENDIF
ELSE
completeCount = completeBridges
IF completeBridges >= 50
PRESENCE_EVENT_UPDATESTAT_INT(SP0_WATER_CANNON_DEATHS, 100)
PRINTLN("<flyUnderBridges> - PRESENCE_EVENT_UPDATESTAT_INT 100")
ELIF completeBridges >= 38
PRESENCE_EVENT_UPDATESTAT_INT(SP0_WATER_CANNON_DEATHS, 75)
PRINTLN("<flyUnderBridges> - PRESENCE_EVENT_UPDATESTAT_INT 75")
ELIF completeBridges >= 25
PRINTLN("<flyUnderBridges> - At least half of all bridges are complete, award percentage.")
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_UNDBRG)
PRESENCE_EVENT_UPDATESTAT_INT(SP0_WATER_CANNON_DEATHS, 50)
PRINTLN("<flyUnderBridges> - PRESENCE_EVENT_UPDATESTAT_INT 50")
ELIF completeBridges >= 13
PRESENCE_EVENT_UPDATESTAT_INT(SP0_WATER_CANNON_DEATHS, 25)
PRINTLN("<flyUnderBridges> - PRESENCE_EVENT_UPDATESTAT_INT 25")
ENDIF
ENDIF
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: ACH29 - Close Shave - :", completeKnives + completeBridges, "of", SP_NUMBER_OF_KNIVES + SP_NUMBER_OF_BRIDGES)
IF (completeKnives = SP_NUMBER_OF_KNIVES) AND (completeBridges = SP_NUMBER_OF_BRIDGES)
AWARD_ACHIEVEMENT(ACH29) // close shave
ENDIF
RETURN completeCount
ENDFUNC
PROC DRAW_FLY_UNDER_SPLASH()
IF NOT IS_RESULT_SCREEN_DISPLAYING()
IF HAS_SCALEFORM_MOVIE_LOADED(sfMovie)
DRAW_SCALEFORM_MOVIE(sfMovie,0.5, 0.5, 1.0, 1.0, 100, 100, 100, 255 )
ENDIF
ENDIF
ENDPROC
PROC CLEANUP_SCALEFORM()
IF HAS_SCALEFORM_MOVIE_LOADED(sfMovie)
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(sfMovie)
ENDIF
ENDPROC
BOOL bShouldTerminate = FALSE
PROC GET_CURRENT_BRIDGE()
INT i
REPEAT SP_NUMBER_OF_CHALLENGES i
IF ARE_VECTORS_ALMOST_EQUAL(vInput, vTriggerPoint[i])
IF i = SP_EXTRA_SUSP_1
OR i = SP_EXTRA_SUSP_2
PRINTLN("<flyUnderBridges> - Bridge is ROADSUSP_PO1")
fStartChecking = 700*700
currentBridge = SP_ROADSUSP_PO1
ELSE
currentBridge = i
ENDIF
ENDIF
ENDREPEAT
IF currentBridge < 32
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, currentBridge)
bShouldTerminate = TRUE
ENDIF
ELIF currentBridge < 64
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2, (currentBridge - 32))
bShouldTerminate = TRUE
ENDIF
ELSE
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3, (currentBridge - 64))
bShouldTerminate = TRUE
ENDIF
ENDIF
IF bShouldTerminate
PRINTLN("<flyUnderBridges> - Bridge ", currentBridge, " has already been completed.")
//TERMINATE_THIS_THREAD()
ELSE
GET_CURRENT_BRIDGE_INFO(currentBridge)
ENDIF
ENDPROC
PROC PRINT_SPLASH()
//INT iSplashSoundID
SWITCH splashStage
CASE loadScaleform
IF bPrintSplash
AND NOT bShouldTerminate
IF NOT IS_RESULT_SCREEN_DISPLAYING()
sfMovie = REQUEST_SCALEFORM_MOVIE("MIDSIZED_MESSAGE")
WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(sfMovie))
WAIT(0)
ENDWHILE
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovie, "SHOW_BRIDGES_KNIVES_PROGRESS")
IF bIsKnife
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FU_KNIFE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(SP_NUMBER_OF_KNIVES)
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FU_TITLE")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(SP_NUMBER_OF_BRIDGES)
ENDIF
//CALL_SCALEFORM_MOVIE_METHOD_WITH_NUMBER_AND_STRING
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FU_PASS")
IF bIsKnife
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FU_CHALL_KN")
ELSE
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("FU_CHALLENGE")
ENDIF
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(CHECK_BRIDGE_COMPLETION())
END_SCALEFORM_MOVIE_METHOD()
iPrintedCompletion = CHECK_BRIDGE_COMPLETION()
g_bCompletedBridgesCount = iPrintedCompletion
//iSplashSoundID = GET_SOUND_ID()
//PLAY_SOUND_FRONTEND(iSplashSoundID, "CHECKPOINT_UNDER_THE_BRIDGE", "HUD_MINI_GAME_SOUNDSET")
SETTIMERB(0)
PLAY_SOUND_FRONTEND( -1,"UNDER_THE_BRIDGE", "HUD_AWARDS")
ENDIF
splashStage = printSplash
ENDIF
BREAK
CASE printSplash
IF TIMERB() > DEFAULT_GOD_TEXT_TIME/2
OR IS_SCREEN_FADED_OUT()
OR NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_RESULT_SCREEN_DISPLAYING()
OR NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
OR IS_REPLAY_BEING_PROCESSED()
OR IS_MINIGAME_SPLASH_SHOWING()
BEGIN_SCALEFORM_MOVIE_METHOD(sfMovie, "SHARD_ANIM_OUT")
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_WHITE))
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(0.33)
END_SCALEFORM_MOVIE_METHOD()
SETTIMERB(0)
splashStage = animateSplash
ELSE
DRAW_FLY_UNDER_SPLASH()
IF g_bCompletedBridgesCount > iPrintedCompletion
splashStage = cleanupSplash
ENDIF
ENDIF
BREAK
CASE animateSplash
IF TIMERB() > 500
OR IS_SCREEN_FADED_OUT()
OR NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_RESULT_SCREEN_DISPLAYING()
OR NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
OR IS_REPLAY_BEING_PROCESSED()
OR IS_MINIGAME_SPLASH_SHOWING()
splashStage = cleanupSplash
ELSE
DRAW_FLY_UNDER_SPLASH()
IF g_bCompletedBridgesCount > iPrintedCompletion
splashStage = cleanupSplash
ENDIF
ENDIF
BREAK
CASE cleanupSplash
CLEANUP_SCALEFORM()
bPrintSplash = FALSE
GET_CURRENT_BRIDGE()
bShouldTerminate = TRUE
splashStage = loadScaleform
BREAK
ENDSWITCH
ENDPROC
PROC STORE_BRIDGE_AS_COMPLETE()
//Check if the current bridge has already been completed
BOOL bAlreadySet
IF currentBridge < 32
bAlreadySet= IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, currentBridge)
ELIF currentBridge < 64
bAlreadySet = IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2, (currentBridge - 32))
ELSE
bAlreadySet = IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3, (currentBridge - 64))
ENDIF
IF bAlreadySet
//Exit as this stat has already been incremented
CPRINTLN(debug_ambient,"<flyUnderBridges> - This bridge has already been completed, skipping stat increase")
ELSE
CDEBUG1LN(debug_ambient,"<flyUnderBridges> - Storing bridge complete for bridge ",currentBridge)
IF NOT bShouldTerminate
IF bIsKnife
STAT_INCREMENT(SP_KNIFE_FLIGHTS_COUNT,1.0)
ELSE
STAT_INCREMENT(SP_UNDER_THE_BRIDGE_COUNT,1.0)
ENDIF
INCREMENT_PLAYER_PED_STAT(GET_CURRENT_PLAYER_PED_ENUM(), PS_FLYING_ABILITY, 3)
MAKE_AUTOSAVE_REQUEST()
ENDIF
IF currentBridge < 32
SET_BIT(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, currentBridge)
ELIF currentBridge < 64
SET_BIT(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2, (currentBridge - 32))
ELSE
SET_BIT(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3, (currentBridge - 64))
ENDIF
g_bUnderTheBridgeTriggered = TRUE
CHECK_BRIDGE_COMPLETION()
bPrintSplash = TRUE
ENDIF
#IF IS_DEBUG_BUILD
IF DOES_BLIP_EXIST(blipBridge[currentBridge])
SET_BLIP_COLOUR(blipBridge[currentBridge], BLIP_COLOUR_GREEN)
ENDIF
#ENDIF
ENDPROC
INT iTerminateTimer
PROC TERMINATE_IF_ALREADY_COMPLETE()
IF GET_GAME_TIMER() - iTerminateTimer > 500
IF currentBridge = SP_ROADSUSP_PO1
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, currentBridge)
bShouldTerminate = TRUE
ENDIF
ENDIF
//CDEBUG3LN(DEBUG_MISSION, "<flyUnderBridges> Terminate check") //Commenting out to prevent constant debug spam.
iTerminateTimer = GET_GAME_TIMER()
ENDIF
ENDPROC
PROC SETUP_DEBUG()
#if IS_DEBUG_BUILD
widgetGroup = START_WIDGET_GROUP("flyUnderBridges")
ADD_WIDGET_BOOL("Add bit field widgets", bAddBitFieldWidgets)
ADD_WIDGET_BOOL("Recheck bridge completion", bCheckBridgeCompletion)
ADD_WIDGET_BOOL("Blip all bridges", bBlipAllBridges)
ADD_WIDGET_BOOL("Test splash", bPrintSplash)
STOP_WIDGET_GROUP()
#ENDIF
ENDPROC
PROC RUN_DEBUG()
#if IS_DEBUG_BUILD
INT iTemp
TEXT_LABEL_23 blipName, blipNumberString
IF bAddBitFieldWidgets
IF NOT bBitFieldWidgetsCreated
SET_CURRENT_WIDGET_GROUP(widgetGroup)
ADD_BIT_FIELD_WIDGET("Bridges Flown Under", g_savedGlobals.sAmbient.iBridgesFlownUnderFlags)
ADD_BIT_FIELD_WIDGET("Bridges Flown Under (Continued)", g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2)
ADD_BIT_FIELD_WIDGET("Bridges Flown Under (Continued Again)", g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3)
CLEAR_CURRENT_WIDGET_GROUP(widgetGroup)
bBitFieldWidgetsCreated = TRUE
ENDIF
bAddBitFieldWidgets = FALSE
ENDIF
IF bCheckBridgeCompletion
CHECK_BRIDGE_COMPLETION()
bCheckBridgeCompletion = FALSE
ENDIF
IF bBlipAllBridges
REPEAT SP_NUMBER_OF_CHALLENGES iTemp
IF DOES_BLIP_EXIST(blipBridge[iTemp])
REMOVE_BLIP(blipBridge[iTemp])
ELSE
blipBridge[iTemp] = ADD_BLIP_FOR_COORD(vTriggerPoint[iTemp])
blipName = "Bridge "
blipNumberString = GET_STRING_FROM_INT(iTemp)
blipName += blipNumberString
SET_BLIP_NAME_FROM_ASCII(blipBridge[iTemp], blipName)
IF iTemp < 32
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, iTemp)
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_GREEN)
ELSE
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_RED)
ENDIF
ELIF iTemp < 64
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2, (iTemp - 32))
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_GREEN)
ELSE
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_RED)
ENDIF
ELSE
IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3, (iTemp - 64))
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_GREEN)
ELSE
SET_BLIP_COLOUR(blipBridge[iTemp], BLIP_COLOUR_RED)
ENDIF
ENDIF
ENDIF
ENDREPEAT
bBlipAllBridges = FALSE
ENDIF
#ENDIF
ENDPROC
FUNC BOOL DOES_PLAYER_MEET_FLIGHT_REQUIREMENTS()
IF bIsKnife
IF IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
IF GET_ENTITY_UPRIGHT_VALUE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) > -0.6
AND GET_ENTITY_UPRIGHT_VALUE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) < 0.6
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - DOES_PLAYER_MEET_FLIGHT_REQUIREMENTS()")
RETURN TRUE
ENDIF
ENDIF
ELSE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
SCRIPT (coords_struct in_coords)
vInput = in_coords.vec_coord[0]
PRINTLN("<flyUnderBridges> - Launched at ", vInput)
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_MAGDEMO)
TERMINATE_THIS_THREAD()
ENDIF
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_ANIMAL) //B* - 2061273
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
OR IS_REPEAT_PLAY_ACTIVE() //B* 2049712 - 'ding' in the plane scene
TERMINATE_THIS_THREAD()
ENDIF
CHECK_BRIDGE_COMPLETION()
SETUP_BRIDGE_INFO()
GET_CURRENT_BRIDGE()
SETUP_DEBUG()
PRINTLN("<flyUnderBridges> - Launched and checking bridge number ", currentBridge)
WHILE TRUE
WAIT(0)
RUN_DEBUG()
PRINT_SPLASH()
IF IS_WORLD_POINT_WITHIN_BRAIN_ACTIVATION_RANGE()
IF IS_PLAYER_PLAYING(PLAYER_ID())
TERMINATE_IF_ALREADY_COMPLETE()
SWITCH underBridgeStage
CASE waitingForInteraction
// IF TIMERA() > (1000/NUMBER_OF_BRIDGES) // Check each area only once per second.
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), vTriggerPoint[currentBridge]) < fStartChecking // Wait until player is within fStartChecking before starting checks.
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
IF currentBridge = SP_KNIFE_SM01
OR currentBridge = SP_KNIFE_2
OR currentBridge = SP_KNIFE_3
OR currentBridge = SP_KNIFE_4
OR currentBridge = SP_KNIFE_5
OR currentBridge = SP_KNIFE_6
OR currentBridge = SP_KNIFE_7
OR currentBridge = SP_KNIFE_8
OR currentBridge = SP_KNIFE_9
OR currentBridge = SP_KNIFE_10
OR currentBridge = SP_KNIFE_11
OR currentBridge = SP_KNIFE_12
OR currentBridge = SP_KNIFE_13
OR currentBridge = SP_KNIFE_14
OR currentBridge = SP_KNIFE_15
bIsKnife = TRUE
ELSE
bIsKnife = FALSE
ENDIF
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF DOES_PLAYER_MEET_FLIGHT_REQUIREMENTS()
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
bEnteredArea1 = TRUE
underBridgeStage = checkForExit
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
bEnteredArea2 = TRUE
underBridgeStage = checkForExit
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
// IF NOT bEnteredArea1
// OR NOT bEnteredArea2
// currentBridge++
// IF currentBridge = NUMBER_OF_BRIDGES
// currentBridge = 0
// ENDIF
// ENDIF
ENDIF
ENDIF
SETTIMERA(0)
// ENDIF
BREAK
CASE checkForExit
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF NOT IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
AND NOT IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Player is no longer in a flying vehicle. Reset & wait.")
ELSE
IF NOT IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Player's vehicle is no longer driveable. Reset & wait.")
ELIF NOT IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Player's vehicle is touching the ground. Reset & wait.")
ENDIF
ENDIF
IF bEnteredArea1
IF bPassingThroughAreas
IF bExitViaArea2
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Passed Through
RESET_BRIDGE_CHECKS()
STORE_BRIDGE_AS_COMPLETE()
REPLAY_RECORD_BACK_FOR_TIME(3)
PRINTLN("<flyUnderBridges> - Succesful! bExitViaArea2 for bridge number ", currentBridge, ".")
ENDIF
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
bExitViaArea2 = TRUE
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Never passed through
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Unsuccessful pass under bridge ", currentBridge, ".")
ENDIF
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
bPassingThroughAreas = TRUE
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Never passed through
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Unsuccessful pass under bridge ", currentBridge, ".")
ENDIF
ENDIF
ENDIF
ELIF bEnteredArea2
IF bPassingThroughAreas
IF bExitViaArea1
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Passed Through
RESET_BRIDGE_CHECKS()
STORE_BRIDGE_AS_COMPLETE()
REPLAY_RECORD_BACK_FOR_TIME(3)
PRINTLN("<flyUnderBridges> - Succesful! bExitViaArea1 for bridge number ", currentBridge, ".")
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
bExitViaArea1 = TRUE
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Never passed through
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Unsuccessful pass under bridge ", currentBridge, ".")
ENDIF
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
bPassingThroughAreas = TRUE
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea1Min, vArea1Max, fAreaWidth)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vArea2Min, vArea2Max, fAreaWidth)
//Never passed through
RESET_BRIDGE_CHECKS()
PRINTLN("<flyUnderBridges> - Unsuccessful pass under bridge ", currentBridge, ".")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDIF
ELSE
IF splashStage = loadScaleform
TERMINATE_THIS_THREAD()
ENDIF
ENDIF
ENDWHILE
ENDSCRIPT