Fix round manager and add more presets.

Add more spawns for mechz. Add spawns for zombie_dog. Add zombie counter for debugging.
This commit is contained in:
JezuzLizard 2024-02-28 23:18:41 -08:00
parent 0f53f2beed
commit 71b6671cd4
17 changed files with 1323 additions and 282 deletions

View File

@ -21420,3 +21420,844 @@
"classname" "script_struct" "classname" "script_struct"
"angles" "0 0 0" "angles" "0 0 0"
} }
{
"targetname" "zone_cafetaria_spawner"
"script_noteworthy" "mechz_location"
"origin" "2725.03 9658.48 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cafetaria_end_spawner"
"script_noteworthy" "mechz_location"
"origin" "3205.23 9663.14 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "mechz_location"
"origin" "881.517 9143.41 1547.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "mechz_location"
"origin" "890.802 9675.04 1545.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "mechz_location"
"origin" "3287.12 9337.17 1528.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_roof_spawner"
"script_noteworthy" "mechz_location"
"origin" "3484.44 9768.23 1534.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_roof_spawner"
"script_noteworthy" "mechz_location"
"origin" "4047.44 9466.48 1528.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "mechz_location"
"origin" "3058.97 9841.8 1560.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "mechz_location"
"origin" "1484.82 9130.33 1343.37"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "mechz_location"
"origin" "355.249 9088.17 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "mechz_location"
"origin" "882.351 9322.25 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "mechz_location"
"origin" "570.376 8618.54 832.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "mechz_location"
"origin" "328.585 8148.19 684.903"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "mechz_location"
"origin" "729.112 8642.57 502.9"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "mechz_location"
"origin" "86.2749 8503.08 340.77"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_spawner"
"script_noteworthy" "mechz_location"
"origin" "-100.741 7516.88 72.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_spawner"
"script_noteworthy" "mechz_location"
"origin" "351.15 7907.94 72.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_building_spawner"
"script_noteworthy" "mechz_location"
"origin" "147.058 7128.03 72.9407"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_building_spawner"
"script_noteworthy" "mechz_location"
"origin" "-460.282 7023.72 64.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "mechz_location"
"origin" "-264.551 6028.64 -8.69766"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "mechz_location"
"origin" "-928.747 9361.24 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "mechz_location"
"origin" "-949.515 8998.29 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "mechz_location"
"origin" "-981.735 8648.42 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_start_spawners"
"script_noteworthy" "mechz_location"
"origin" "1045.63 10582.1 1344.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_start_spawners"
"script_noteworthy" "mechz_location"
"origin" "1405.83 10593.9 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "mechz_location"
"origin" "2918.04 9452.32 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_infirmary_spawner"
"script_noteworthy" "mechz_location"
"origin" "3714.47 9357.89 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "mechz_location"
"origin" "-1011.61 -3441.96 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "mechz_location"
"origin" "-1111.55 -3744.06 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"classname" "actor_zombie_dog"
"model" "zombie_wolf"
"export" "1"
"spawnflags" "17"
"origin" "100 0 -500"
"script_noteworthy" "zombie_dog_spawner"
}
{
"targetname" "zone_start_spawners"
"script_noteworthy" "zombie_dog_location"
"origin" "1736.31 10639.9 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_start_spawners"
"script_noteworthy" "zombie_dog_location"
"origin" "2036.6 10351.8 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_start_spawners"
"script_noteworthy" "zombie_dog_location"
"origin" "1183.63 10527.4 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_library_spawners"
"script_noteworthy" "zombie_dog_location"
"origin" "402.293 10629.5 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "882.824 9982.29 1344.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "402.382 10227.2 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "968.15 10195.3 1344.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "730.142 9733.42 1442.41"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "873.7 9978.59 1440.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "904.37 9443.14 1440.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1051.31 9671.24 1545.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "850.545 8910.55 1544.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_gondola_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "999.076 8433.01 1544.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1287.83 9624.33 1544.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2167.42 9611.81 1558.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2162.94 9286.91 1558.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2600.03 9309.99 1528.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2583.17 9929 1560.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2927.24 9817.08 1560.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3282.58 9291.64 1528.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3478.58 9776.94 1534.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3889.84 9735.01 1528.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_infirmary_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "4194.48 9484.51 1534.24"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3857.55 9331.99 1712.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3587.77 9344.71 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3268.26 9351.12 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3011.81 9305.99 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2431.73 9321.52 1711.35"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2257.53 9511.04 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2265.02 10022 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2551.71 9759.74 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2917.61 10016.3 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3417.27 10029.8 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_roof_infirmary_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3907.33 10006 1704.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cafetaria_end_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3285.19 9950.46 1339.91"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cafetaria_end_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "3221.19 9602.3 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cafetaria_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2773.16 9362.9 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cafetaria_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2353.91 9643.4 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_east_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "2065.13 9895.34 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_east_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1470.51 9663.33 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_east_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1689.01 9141.98 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1069.96 9137.75 1443.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "555.685 9218.82 1440.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_warden_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-387.737 9116.65 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_citadel_warden"
"script_noteworthy" "zombie_dog_location"
"origin" "174.117 8739.28 1136.01"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_citadel_warden"
"script_noteworthy" "zombie_dog_location"
"origin" "735.943 9006.16 1128.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_citadel"
"script_noteworthy" "zombie_dog_location"
"origin" "417.32 9599.52 1104.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_citadel"
"script_noteworthy" "zombie_dog_location"
"origin" "724.651 10004.8 1128.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_shower"
"script_noteworthy" "zombie_dog_location"
"origin" "1678.52 10359.1 1144.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_shower"
"script_noteworthy" "zombie_dog_location"
"origin" "2075.71 10346.1 1144.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_shower"
"script_noteworthy" "zombie_dog_location"
"origin" "2101.07 9696.64 1144.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_shower"
"script_noteworthy" "zombie_dog_location"
"origin" "1919.88 9097.18 1144.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_shower"
"script_noteworthy" "zombie_dog_location"
"origin" "1646.06 9566.59 1144.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_cellblock_west_barber_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "1516.68 9217.38 1341.21"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-499.962 9419.59 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-1015.08 9472.75 1340.32"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-1040.77 8931.18 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-1035.42 8563.19 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_warden_office_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-548.046 8786.22 1336.13"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "566.468 8547.15 832.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "66.8536 8538.57 796.524"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "379.85 8231.31 676.772"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "607.649 8536.06 513.143"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "302.276 8628.75 395.893"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_stairs_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "55.957 8303.36 298.466"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "432.359 7889.63 64.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "49.2319 7662.62 64.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_building_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "311.608 7147.19 95.7652"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "citadel_basement_building_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-508.615 7000.74 64.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_studio_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "59.2196 6820.04 64.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_studio_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-447.706 6434.78 72.125"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "330.199 6214.2 45.868"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-597.664 6130.49 -36.3894"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-872.353 5753.49 -67.7443"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-1237.16 5251.97 -65.7902"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_puzzle_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-1379.6 5556.6 -71.875"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "-375.256 5612.04 -71.875"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_gondola_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "681.673 6798.12 210.434"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "zone_dock_gondola_spawner"
"script_noteworthy" "zombie_dog_location"
"origin" "710.27 6558.34 209.353"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1782.82 -3272.03 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1781.43 -3503.55 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1697.8 -3826.63 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1376.12 -3869.49 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1241.28 -3674.41 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-1050.41 -3441.63 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-797.884 -3876.34 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-495.026 -3836.23 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-503.895 -3649.14 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-539.342 -3403.96 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}
{
"targetname" "spawner_golden_gate_bridge"
"script_noteworthy" "zombie_dog_location"
"origin" "-796.16 -3409.1 -8447.88"
"classname" "script_struct"
"angles" "0 0 0"
}

View File

@ -1392,7 +1392,6 @@ get_priority_item_for_brutus( zone_name, do_secondary_zone_checks )
if ( !isDefined( int_objects ) ) if ( !isDefined( int_objects ) )
{ {
print( "int_objects is undefined" );
continue; continue;
} }

View File

@ -4,6 +4,8 @@
#include maps\mp\zombies\_zm; #include maps\mp\zombies\_zm;
#include scripts\zm\zm_ai_pack\_utility;
main() main()
{ {
set_dvar_if_unset( "rm_min_rounds_before_special_round", 3 ); set_dvar_if_unset( "rm_min_rounds_before_special_round", 3 );
@ -17,7 +19,7 @@ main()
set_dvar_if_unset( "rm_forced_special_variant", "" ); set_dvar_if_unset( "rm_forced_special_variant", "" );
set_dvar_if_unset( "rm_allowed_mixed_rounds_presets", "default" ); set_dvar_if_unset( "rm_allowed_mixed_rounds_presets", "default" );
set_dvar_if_unset( "rm_allowed_mixed_rounds_variants", "random" ); set_dvar_if_unset( "rm_allowed_mixed_round_variants", "random" );
set_dvar_if_unset( "rm_forced_mixed_rounds_preset", "" ); set_dvar_if_unset( "rm_forced_mixed_rounds_preset", "" );
set_dvar_if_unset( "rm_forced_mixed_rounds_variant", "" ); set_dvar_if_unset( "rm_forced_mixed_rounds_variant", "" );
@ -35,6 +37,10 @@ main()
level.normal_round.current_data.round_type = ""; level.normal_round.current_data.round_type = "";
level.normal_round.current_data.variant = ""; level.normal_round.current_data.variant = "";
register_ai_spawning_func( "normal", scripts\zm\zm_ai_pack\rounds\_normal::spawn_single_normal_zombie );
register_ai_spawning_func( "zombie_dog", scripts\zm\zm_ai_pack\rounds\_zombie_dog::spawn_single_zombie_dog );
register_ai_spawning_func( "mechz", scripts\zm\zm_ai_pack\rounds\_mechz::spawn_single_mechz );
scripts\zm\zm_ai_pack\rounds\_zombie_dog::main(); scripts\zm\zm_ai_pack\rounds\_zombie_dog::main();
scripts\zm\zm_ai_pack\rounds\_mechz::main(); scripts\zm\zm_ai_pack\rounds\_mechz::main();
@ -93,13 +99,24 @@ main()
scripts\zm\zm_ai_pack\rounds\_mixed::round_next ); scripts\zm\zm_ai_pack\rounds\_mixed::round_next );
register_mixed_round_preset( "default", register_mixed_round_preset( "default",
scripts\zm\zm_ai_pack\rounds\mixed_presets\_default::preset_chance ); scripts\zm\zm_ai_pack\mixed_presets\_default::preset_chance,
scripts\zm\zm_ai_pack\mixed_presets\_default::round_start );
register_mixed_round_preset_variant( "default", "random", register_mixed_round_preset_variant( "default", "random",
scripts\zm\zm_ai_pack\rounds\mixed_variants\_random::spawning_random, scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_random,
scripts\zm\zm_ai_pack\rounds\mixed_variants\_random::spawning_chance, scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_chance,
scripts\zm\zm_ai_pack\rounds\mixed_variants\_random::spawning_limit, scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_limit,
scripts\zm\zm_ai_pack\rounds\mixed_variants\_random::spawning_cooldown ); scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_cooldown,
scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_round_start );
register_mixed_round_preset_variant( "default", "dog_wave",
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_dog_wave,
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_chance,
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_limit,
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_cooldown,
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_round_start);
scripts\zm\zm_ai_pack\mixed_variants\_random::main();
//Future variants //Future variants
// random - random ais, true_random - random ais + random behavior and stats // random - random ais, true_random - random ais + random behavior and stats
// elemental? // elemental?
@ -108,58 +125,6 @@ main()
// several default presets to cycle through // several default presets to cycle through
} }
register_special_round( round_type, variant_type, round_spawning_func, round_wait_func, round_max_func, round_start_func, between_round_over_func, round_chance_func, next_instance_func )
{
if ( !isDefined( level.round_manager_special_rounds ) )
{
level.round_manager_special_rounds = [];
}
if ( !isDefined( level.round_manager_special_rounds[ round_type ] ) )
{
level.round_manager_special_rounds[ round_type ] = [];
}
s = sys::spawnstruct();
s.spawning_func = round_spawning_func;
s.wait_func = round_wait_func;
s.max_func = round_max_func;
s.start_func = round_start_func;
s.between_round_over_func = between_round_over_func;
s.chance_func = round_chance_func;
s.next_instance_func = next_instance_func;
s.active = false;
level.round_manager_special_rounds[ round_type ][ variant_type ] = s;
}
register_mixed_round_preset( preset_type, preset_chance_func )
{
if ( !isDefined( level.round_manager_mixed_round_presets ) )
{
level.round_manager_mixed_round_presets = [];
}
if ( !isDefined( level.round_manager_mixed_round_presets[ preset_type ] ) )
{
level.round_manager_mixed_round_presets[ preset_type ] = sys::spawnstruct();
level.round_manager_mixed_round_presets[ preset_type ].variants = [];
}
level.round_manager_mixed_round_presets[ preset_type ].chance_func = preset_chance_func;
}
register_mixed_round_preset_variant( preset_type, variant_type, spawning_func, spawning_chance_func, spawning_limit_per_round_func, spawning_cooldown_func )
{
assert( isdefined( level.round_manager_mixed_round_presets[ preset_type ] ) );
s = sys::spawnstruct();
s.spawning_func = spawning_func;
s.chance_func = spawning_chance_func;
s.limit_per_round_func = spawning_limit_per_round_func;
s.cooldown_func = spawning_cooldown_func;
level.round_manager_mixed_round_presets[ preset_type ].variants[ variant_type ] = s;
}
should_do_special_round() should_do_special_round()
{ {
if ( getDvar( "rm_forced_special_round" ) != "" && getdvar( "rm_forced_special_variant" ) ) if ( getDvar( "rm_forced_special_round" ) != "" && getdvar( "rm_forced_special_variant" ) )
@ -222,8 +187,7 @@ determine_current_round_type()
{ {
if ( !isDefined( level.round_manager_special_rounds[ forced_special_round ] ) || !isDefined( level.round_manager_special_rounds[ forced_special_round ][ forced_variant ] ) ) if ( !isDefined( level.round_manager_special_rounds[ forced_special_round ] ) || !isDefined( level.round_manager_special_rounds[ forced_special_round ][ forced_variant ] ) )
{ {
print( "Round Manager ERROR: Can't set special round and variant to " + forced_special_round + " and " + forced_variant + " because it wasn't registered" ); assertmsg( "Round Manager ERROR: Can't set special round and variant to " + forced_special_round + " and " + forced_variant + " because it wasn't registered" );
assert( false );
} }
else else
{ {
@ -315,36 +279,6 @@ determine_current_round_type()
} }
} }
get_zombie_dog_array()
{
return getaispeciesarray( level.zombie_team, "zombie_dog" );
}
get_zombie_dog_count()
{
return get_zombie_dog_array().size;
}
get_mechz_array()
{
zombies = getaiarray( level.zombie_team );
mechz = [];
for ( i = 0; i < zombies.size; i++ )
{
if ( isdefined( zombies[ i ].animname ) && zombies[ i ].animname == "mechz_zombie" )
{
mechz[ mechz.size ] = zombies[ i ];
}
}
return mechz;
}
get_mechz_count()
{
return get_mechz_array().size;
}
round_think_override( restart ) round_think_override( restart )
{ {
if ( !isdefined( restart ) ) if ( !isdefined( restart ) )
@ -421,6 +355,10 @@ round_think_override( restart )
while ( level.zombie_spawn_locations.size <= 0 ) while ( level.zombie_spawn_locations.size <= 0 )
wait 0.1; wait 0.1;
/#
while ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
wait 1;
#/
level.round_manager_special_rounds[ current_round_data.round_type ][ current_round_data.variant ].active = true; level.round_manager_special_rounds[ current_round_data.round_type ][ current_round_data.variant ].active = true;
level [[ round_manager_inst.max_func ]](); level [[ round_manager_inst.max_func ]]();
@ -510,8 +448,7 @@ determine_mixed_round_preset()
{ {
if ( !isDefined( level.round_manager_mixed_round_presets[ forced_preset ] ) ) if ( !isDefined( level.round_manager_mixed_round_presets[ forced_preset ] ) )
{ {
print( "Round Manager ERROR: Can't set preset to " + forced_preset + " because it wasn't registered" ); assertmsg( "Round Manager ERROR: Can't set preset to " + forced_preset + " because it wasn't registered" );
assert( false );
} }
else else
{ {
@ -521,7 +458,7 @@ determine_mixed_round_preset()
allowed_presets_string = getDvar( "rm_allowed_mixed_rounds_presets" ); allowed_presets_string = getDvar( "rm_allowed_mixed_rounds_presets" );
allowed_presets_keys = strok( allowed_presets_string, " " ); allowed_presets_keys = strtok( allowed_presets_string, " " );
max_iterations = 50; max_iterations = 50;
current_iterations = 0; current_iterations = 0;
@ -552,12 +489,11 @@ pick_mixed_round_preset_variant( variants )
{ {
forced_variant = getdvar( "rm_forced_mixed_rounds_variant" ); forced_variant = getdvar( "rm_forced_mixed_rounds_variant" );
if ( forced_preset != "" ) if ( forced_variant != "" )
{ {
if ( !isDefined( variants[ forced_variant ] ) ) if ( !isDefined( variants[ forced_variant ] ) )
{ {
print( "Round Manager ERROR: Can't set preset to " + forced_preset + " because it wasn't registered" ); assertmsg( "Round Manager ERROR: Can't set preset to " + forced_variant + " because it wasn't registered" );
assert( false );
} }
else else
{ {
@ -565,7 +501,7 @@ pick_mixed_round_preset_variant( variants )
} }
} }
allowed_variants_string = getdvar( "rm_allowed_mixed_rounds_variants" ); allowed_variants_string = getdvar( "rm_allowed_mixed_round_variants" );
pick_from_allowed_variants_pool = allowed_variants_string != ""; pick_from_allowed_variants_pool = allowed_variants_string != "";
@ -589,8 +525,9 @@ pick_mixed_round_preset_variant( variants )
possible_variants = array_randomize( allowed_variants_keys ); possible_variants = array_randomize( allowed_variants_keys );
for ( i = 0; i < possible_variants.size; i++ ) for ( i = 0; i < possible_variants.size; i++ )
{ {
if ( [[ variants[ possible_variants[ i ] ].chance_func ]]() ) if ( [[ variants[ possible_variants[ i ] ].chance_func ]]() && possible_variants[ i ] [[ variants[ possible_variants[ i ] ].cooldown_func ]]() )
{ {
variants[ possible_variants[ i ] ].last_time = gettime();
return variants[ possible_variants[ i ] ]; return variants[ possible_variants[ i ] ];
} }
} }
@ -599,7 +536,21 @@ pick_mixed_round_preset_variant( variants )
if ( current_iterations >= max_iterations ) if ( current_iterations >= max_iterations )
{ {
variants[ possible_variants[ 0 ] ].last_time = gettime();
return variants[ possible_variants[ 0 ] ]; return variants[ possible_variants[ 0 ] ];
} }
} }
} }
set_starting_properties_for_ai( starting_properties_struct )
{
if ( !isdefined( starting_properties_struct ) )
{
return;
}
if ( isdefined( starting_properties_struct.health ) )
{
self.custom_starting_health = starting_properties_struct.health;
}
}

View File

@ -0,0 +1,122 @@
#include maps\mp\zombies\_zm_utility;
#include common_scripts\utility;
#include maps\mp\_utility;
register_special_round( round_type, variant_type, round_spawning_func, round_wait_func, round_max_func, round_start_func, between_round_over_func, round_chance_func, next_instance_func )
{
if ( !isDefined( level.round_manager_special_rounds ) )
{
level.round_manager_special_rounds = [];
}
if ( !isDefined( level.round_manager_special_rounds[ round_type ] ) )
{
level.round_manager_special_rounds[ round_type ] = [];
}
s = sys::spawnstruct();
s.spawning_func = round_spawning_func;
s.wait_func = round_wait_func;
s.max_func = round_max_func;
s.start_func = round_start_func;
s.between_round_over_func = between_round_over_func;
s.chance_func = round_chance_func;
s.next_instance_func = next_instance_func;
s.active = false;
level.round_manager_special_rounds[ round_type ][ variant_type ] = s;
}
register_mixed_round_preset( preset_type, preset_chance_func, preset_round_start_func )
{
if ( !isDefined( level.round_manager_mixed_round_presets ) )
{
level.round_manager_mixed_round_presets = [];
}
if ( !isDefined( level.round_manager_mixed_round_presets[ preset_type ] ) )
{
level.round_manager_mixed_round_presets[ preset_type ] = sys::spawnstruct();
level.round_manager_mixed_round_presets[ preset_type ].variants = [];
}
level.round_manager_mixed_round_presets[ preset_type ].chance_func = preset_chance_func;
level.round_manager_mixed_round_presets[ preset_type ].start_func = preset_round_start_func;
}
register_mixed_round_preset_variant( preset_type, variant_type, spawning_func, spawning_chance_func, spawning_limit, spawning_cooldown_func, spawning_round_start_func )
{
assert( isdefined( level.round_manager_mixed_round_presets[ preset_type ] ) );
s = sys::spawnstruct();
s.spawning_func = spawning_func;
s.chance_func = spawning_chance_func;
s.limit = spawning_limit;
s.cooldown_func = spawning_cooldown_func;
s.start_func = spawning_round_start_func;
s.last_time = 0;
s.preset_type = preset_type;
s.variant_type = variant_type;
level.round_manager_mixed_round_presets[ preset_type ].variants[ variant_type ] = s;
}
register_ai_spawning_func( aitype, spawning_func )
{
if ( !isdefined( level.round_manager_aitype_spawning_funcs ) )
{
level.round_manager_aitype_spawning_funcs = [];
}
level.round_manager_aitype_spawning_funcs[ aitype ] = spawning_func;
}
get_zombie_dog_array()
{
return getaispeciesarray( level.zombie_team, "zombie_dog" );
}
get_zombie_dog_count()
{
return get_zombie_dog_array().size;
}
get_mechz_array()
{
zombies = getaiarray( level.zombie_team );
mechz = [];
for ( i = 0; i < zombies.size; i++ )
{
if ( isdefined( zombies[ i ].animname ) && zombies[ i ].animname == "mechz_zombie" )
{
mechz[ mechz.size ] = zombies[ i ];
}
}
return mechz;
}
get_mechz_count()
{
return get_mechz_array().size;
}
get_all_ai_array()
{
return getaispeciesarray( level.zombie_team, "all" );
}
get_all_ai_count()
{
return get_all_ai_array().size;
}
wait_for_free_ai_slot( func )
{
while ( level.zombie_total <= 0 || isdefined( func ) && [[ func ]]() >= level.zombie_ai_limit )
wait 0.1;
while ( get_current_actor_count() >= level.zombie_actor_limit )
{
clear_all_corpses();
wait 0.1;
}
}

View File

@ -0,0 +1,14 @@
main()
{
}
preset_chance()
{
return true;
}
round_start()
{
level.round_manager_spawn_count = 0;
}

View File

@ -0,0 +1,75 @@
#include maps\mp\zombies\_zm_utility;
#include common_scripts\utility;
#include maps\mp\_utility;
#include scripts\zm\zm_ai_pack\_utility;
main()
{
set_dvar_if_unset( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_min", 6 );
set_dvar_if_unset( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_max", 12 );
}
spawning_dog_wave()
{
level.round_manager_dog_wave_count++;
players = sys::getplayers();
max_dogs_in_wave = 12;
if ( players.size == 1 )
{
max_dogs_in_wave = 6;
}
while ( get_all_ai_count() > ( level.zombie_ai_limit - max_dogs_in_wave ) && level.zombie_total > 0 )
{
wait 0.5;
}
spawned_dog_count = 0;
max_dogs_in_wave = min( level.zombie_total, max_dogs_in_wave );
while ( ( spawned_dog_count < max_dogs_in_wave ) && level.zombie_total > 0 )
{
wait_for_free_ai_slot( ::get_all_ai_count );
ai = level [[ level.round_manager_aitype_spawning_funcs[ "zombie_dog" ] ]]();
if ( ai )
{
spawned_dog_count++;
level.round_manager_spawn_count++;
}
wait( level.zombie_vars["zombie_spawn_delay"] );
}
level.round_manager_dog_wave_count++;
level.round_manager_guaranteed_dog_wave_time = getTime() + ( 80000 * level.round_manager_dog_wave_count );
wait( level.zombie_vars["zombie_spawn_delay"] );
}
spawning_chance()
{
chance_of_dog_wave = 0;
chance_of_dog_wave -= ( level.round_manager_dog_wave_count * 1000 );
chance_of_dog_wave += ( level.round_manager_spawn_count * randomintrange( 5, 10 ) );
should_spawn_dog_wave_random = chance_of_dog_wave >= 1000;
should_spawn_guaranteed_dog_wave = ( ( level.round_manager_guaranteed_dog_wave_time + 80000 ) <= getTime() );
return should_spawn_dog_wave_random || should_spawn_guaranteed_dog_wave;
}
spawning_limit()
{
return level.players.size <= 1 ? getdvarint( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_min" ) : getdvarint( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_max" );
}
spawning_cooldown()
{
return true;
}
spawning_round_start()
{
level.round_manager_guaranteed_dog_wave_time = level.round_start_time;
level.round_manager_dog_wave_count = 0;
level.round_manager_chance_of_dog_wave = 0;
}

View File

@ -0,0 +1,80 @@
#include maps\mp\zombies\_zm_utility;
#include common_scripts\utility;
#include maps\mp\_utility;
#include scripts\zm\zm_ai_pack\_utility;
main()
{
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_allowed_aitypes", "normal zombie_dog mechz" );
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_limit", 24 );
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_cooldown", 1 );
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_1000", 5 );
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_1000", 200 );
}
spawning_random()
{
level endon( "intermission" );
level endon( "end_of_round" );
level endon( "restart_round" );
/#
level endon( "kill_round" );
#/
mechz_spawn_chance = getdvarint( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_1000" );
zombie_dog_chance = getdvarint( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_1000" );
count = 0;
for (;;)
{
wait_for_free_ai_slot( ::get_all_ai_count );
ai = undefined;
random_number = randomint( 1000 );
if ( random_number < mechz_spawn_chance )
{
ai = [[ level.round_manager_aitype_spawning_funcs[ "mechz" ] ]]();
}
else if ( random_number < zombie_dog_chance )
{
ai = [[ level.round_manager_aitype_spawning_funcs[ "zombie_dog" ] ]]();
}
else
{
ai = [[ level.round_manager_aitype_spawning_funcs[ "normal" ] ]]();
}
if ( isdefined( ai ) )
{
count++;
level.round_manager_spawn_count++;
}
if ( count >= spawning_limit() )
{
return;
}
wait( level.zombie_vars["zombie_spawn_delay"] );
}
}
spawning_chance()
{
return true;
}
spawning_limit()
{
return getdvarint( "rm_mixed_preset_default_random_variant_wave_spawn_limit" );
}
spawning_cooldown()
{
return ( self.last_time + ( getdvarint( "rm_mixed_preset_default_random_variant_wave_spawn_cooldown" ) * 1000 ) ) <= gettime();
}
spawning_round_start()
{
}

View File

@ -5,6 +5,7 @@
#include maps\mp\zombies\_zm_ai_mechz; #include maps\mp\zombies\_zm_ai_mechz;
#include scripts\zm\zm_ai_pack\_round_manager; #include scripts\zm\zm_ai_pack\_round_manager;
#include scripts\zm\zm_ai_pack\_utility;
main() main()
{ {
@ -17,8 +18,8 @@ main()
set_dvar_if_unset( "rm_mechz_rush_min_round", 45 ); set_dvar_if_unset( "rm_mechz_rush_min_round", 45 );
set_dvar_if_unset( "rm_mechz_rush_min_spawn_wait", 1.5 ); set_dvar_if_unset( "rm_mechz_rush_min_spawn_wait", 1.5 );
set_dvar_if_unset( "rm_mechz_rush_max_spawn_wait", 2.5 ); set_dvar_if_unset( "rm_mechz_rush_max_spawn_wait", 2.5 );
set_dvar_if_unset( "rm_mechz_rush_max_mechz_alive", 24 ); set_dvar_if_unset( "rm_mechz_rush_max_mechz_alive", 12 );
set_dvar_if_unset( "rm_mechz_rush_max_mechz_round", 24 ); set_dvar_if_unset( "rm_mechz_rush_max_mechz_round", 12 );
set_dvar_if_unset( "rm_mechz_rush_max_health_multiplier", 0.5 ); set_dvar_if_unset( "rm_mechz_rush_max_health_multiplier", 0.5 );
} }
@ -46,10 +47,6 @@ round_spawning()
if ( level.intermission ) if ( level.intermission )
return; return;
/#
if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
return;
#/
round_spawning_common(); round_spawning_common();
for (;;) for (;;)
@ -188,7 +185,9 @@ round_spawning_rush()
while ( level.zombie_mechz_locations.size < 1 ) while ( level.zombie_mechz_locations.size < 1 )
wait( randomfloatrange( 5.0, 10.0 ) ); wait( randomfloatrange( 5.0, 10.0 ) );
ai = spawn_single_mechz( int( level.mechz_health * getdvarfloat( "rm_mechz_rush_max_health_multiplier" ) ) ); starting_properties = sys::spawnstruct();
starting_properties.health = int( level.mechz_health * getdvarfloat( "rm_mechz_rush_max_health_multiplier" ) );
ai = spawn_single_mechz( starting_properties );
if ( level.mechz_left_to_spawn == 0 ) if ( level.mechz_left_to_spawn == 0 )
level thread maps\mp\zombies\_zm_ai_mechz::response_to_air_raid_siren_vo(); level thread maps\mp\zombies\_zm_ai_mechz::response_to_air_raid_siren_vo();
@ -233,13 +232,11 @@ round_next_rush()
} }
} }
spawn_single_mechz( starting_health ) spawn_single_mechz( starting_properties )
{ {
ai = spawn_zombie( level.mechz_spawners[0] ); ai = spawn_zombie( level.mechz_spawners[0] );
if ( isdefined( starting_health ) )
{ ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties );
ai.custom_starting_health = starting_health;
}
ai thread maps\mp\zombies\_zm_ai_mechz::mechz_spawn(); ai thread maps\mp\zombies\_zm_ai_mechz::mechz_spawn();
if ( isdefined( ai ) ) if ( isdefined( ai ) )

View File

@ -4,6 +4,8 @@
#include maps\mp\zombies\_zm; #include maps\mp\zombies\_zm;
#include scripts\zm\zm_ai_pack\_utility;
round_spawning() round_spawning()
{ {
level endon( "intermission" ); level endon( "intermission" );
@ -16,11 +18,6 @@ round_spawning()
if ( level.intermission ) if ( level.intermission )
return; return;
/#
if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
return;
#/
if ( level.zombie_spawn_locations.size < 1 ) if ( level.zombie_spawn_locations.size < 1 )
{ {
/# /#
@ -34,32 +31,19 @@ round_spawning()
if ( level.round_number < 10 || level.speed_change_max > 0 ) if ( level.round_number < 10 || level.speed_change_max > 0 )
level thread zombie_speed_up(); level thread zombie_speed_up();
mixed_spawns = 0;
old_spawn = undefined;
spawning_preset = scripts\zm\zm_ai_pack\_round_manager::determine_mixed_round_preset();
while ( true ) while ( true )
{ {
while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) spawning_variant = scripts\zm\zm_ai_pack\_round_manager::pick_mixed_round_preset_variant( level.round_manager_spawning_preset.variants );
wait 0.1;
while ( get_current_actor_count() >= level.zombie_actor_limit ) if ( isdefined( spawning_variant ) )
{ {
clear_all_corpses(); if ( getdvarint( "zm_ai_pack_debug" ) > 0 )
wait 0.1; {
print( "Round Manager: Running mixed preset <" + spawning_variant.preset_type + "> variant <" + spawning_variant.variant_type + ">" );
}
level [[ spawning_variant.spawning_func ]]();
} }
flag_wait( "spawn_zombies" );
while ( level.zombie_spawn_locations.size <= 0 )
wait 0.1;
run_custom_ai_spawn_checks();
ai = scripts\zm\zm_ai_pack\rounds\_normal::spawn_single_normal_zombie();
wait( level.zombie_vars["zombie_spawn_delay"] );
wait_network_frame(); wait_network_frame();
} }
} }
@ -84,7 +68,7 @@ round_wait()
if ( isdefined( level.is_ghost_round_started ) && [[ level.is_ghost_round_started ]]() ) if ( isdefined( level.is_ghost_round_started ) && [[ level.is_ghost_round_started ]]() )
should_wait = 1; should_wait = 1;
else else
should_wait = get_current_zombie_count() > 0 || level.zombie_total > 0 || level.intermission; should_wait = get_all_ai_count() > 0 || level.zombie_total > 0 || level.intermission;
if ( !should_wait ) if ( !should_wait )
return; return;
@ -131,7 +115,16 @@ round_max()
round_start() round_start()
{ {
level.round_manager_spawning_preset = scripts\zm\zm_ai_pack\_round_manager::determine_mixed_round_preset();
level [[ level.round_manager_spawning_preset.start_func ]]();
variants = level.round_manager_spawning_preset.variants;
variant_keys = getarraykeys( level.round_manager_spawning_preset.variants );
for ( i = 0; i < variant_keys.size; i++ )
{
level [[ variants[ variant_keys[ i ] ].start_func ]]();
}
} }
round_over() round_over()
@ -148,67 +141,3 @@ round_next()
{ {
return level.round_number + 1; return level.round_number + 1;
} }
special_dog_spawn( spawners, num_to_spawn )
{
dogs = getaispeciesarray( "all", "zombie_dog" );
if ( isdefined( dogs ) && dogs.size >= 9 )
return false;
if ( !isdefined( num_to_spawn ) )
num_to_spawn = 1;
spawn_point = undefined;
count = 0;
while ( count < num_to_spawn )
{
players = sys::getplayers();
favorite_enemy = get_favorite_enemy();
if ( isdefined( spawners ) )
{
spawn_point = spawners[randomint( spawners.size )];
ai = spawn_zombie( spawn_point );
if ( isdefined( ai ) )
{
ai.favoriteenemy = favorite_enemy;
spawn_point thread dog_spawn_fx( ai );
count++;
flag_set( "dog_clips" );
}
}
else if ( isdefined( level.dog_spawn_func ) )
{
spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy );
ai = spawn_zombie( level.dog_spawners[0] );
if ( isdefined( ai ) )
{
ai.favoriteenemy = favorite_enemy;
spawn_loc thread dog_spawn_fx( ai, spawn_loc );
count++;
flag_set( "dog_clips" );
}
}
else
{
spawn_point = dog_spawn_factory_logic( level.enemy_dog_spawns, favorite_enemy );
ai = spawn_zombie( level.dog_spawners[0] );
if ( isdefined( ai ) )
{
ai.favoriteenemy = favorite_enemy;
spawn_point thread dog_spawn_fx( ai, spawn_point );
count++;
flag_set( "dog_clips" );
}
}
waiting_for_next_dog_spawn( count, num_to_spawn );
}
return true;
}

View File

@ -4,6 +4,8 @@
#include maps\mp\zombies\_zm; #include maps\mp\zombies\_zm;
#include scripts\zm\zm_ai_pack\_utility;
round_spawning() round_spawning()
{ {
level endon( "intermission" ); level endon( "intermission" );
@ -13,18 +15,10 @@ round_spawning()
level endon( "kill_round" ); level endon( "kill_round" );
#/ #/
if ( level.intermission )
return;
/#
if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
return;
#/
if ( level.zombie_spawn_locations.size < 1 ) if ( level.zombie_spawn_locations.size < 1 )
{ {
/# /#
assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." ); assertmsg( "No active spawn locations in the zone. Check to see if the zone is active and if it's pointing to spawners." );
#/ #/
return; return;
} }
@ -39,7 +33,7 @@ round_spawning()
while ( true ) while ( true )
{ {
while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 || level.intermission )
wait 0.1; wait 0.1;
while ( get_current_actor_count() >= level.zombie_actor_limit ) while ( get_current_actor_count() >= level.zombie_actor_limit )
@ -171,9 +165,10 @@ default_max_zombie_func( max_num )
return max; return max;
} }
spawn_single_normal_zombie() spawn_single_normal_zombie( starting_properties_struct )
{ {
ai = undefined; ai = undefined;
old_spawn = undefined;
spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )]; spawn_point = level.zombie_spawn_locations[randomint( level.zombie_spawn_locations.size )];
@ -218,5 +213,7 @@ spawn_single_normal_zombie()
ai thread round_spawn_failsafe(); ai thread round_spawn_failsafe();
} }
ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties_struct );
return ai; return ai;
} }

View File

@ -5,6 +5,7 @@
#include maps\mp\zombies\_zm_ai_dogs; #include maps\mp\zombies\_zm_ai_dogs;
#include scripts\zm\zm_ai_pack\_round_manager; #include scripts\zm\zm_ai_pack\_round_manager;
#include scripts\zm\zm_ai_pack\_utility;
main() main()
{ {
@ -12,9 +13,9 @@ main()
set_dvar_if_unset( "rm_dog_rush_min_round", 20 ); set_dvar_if_unset( "rm_dog_rush_min_round", 20 );
set_dvar_if_unset( "rm_dog_rush_round_chance", 10 ); set_dvar_if_unset( "rm_dog_rush_round_chance", 10 );
set_dvar_if_unset( "rm_dog_rush_max_dogs_alive", 24 ); set_dvar_if_unset( "rm_dog_rush_max_dogs_alive_per_player", 6 );
set_dvar_if_unset( "rm_dog_rush_max_dogs_round", 128 ); set_dvar_if_unset( "rm_dog_rush_max_dogs_round", 64 );
set_dvar_if_unset( "rm_dog_rush_max_dogs_round_per_player", 8 ); set_dvar_if_unset( "rm_dog_rush_max_dogs_round_per_player", 4 );
set_dvar_if_unset( "rm_dog_rush_max_dogs_round_base", 24 ); set_dvar_if_unset( "rm_dog_rush_max_dogs_round_base", 24 );
set_dvar_if_unset( "rm_dog_rush_max_dogs_round_number_multiplier", 0.1 ); set_dvar_if_unset( "rm_dog_rush_max_dogs_round_number_multiplier", 0.1 );
set_dvar_if_unset( "rm_dog_rush_max_spawn_wait", 0.5 ); set_dvar_if_unset( "rm_dog_rush_max_spawn_wait", 0.5 );
@ -23,28 +24,18 @@ main()
round_spawning() round_spawning()
{ {
level endon( "end_of_round" );
level endon( "intermission" ); level endon( "intermission" );
level.dog_targets = sys::getplayers(); level endon( "end_of_round" );
level endon( "restart_round" );
for ( i = 0; i < level.dog_targets.size; i++ )
level.dog_targets[i].hunted_by = 0;
/# /#
level endon( "kill_round" ); level endon( "kill_round" );
if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
return;
#/ #/
if ( level.intermission )
return;
count = 0; count = 0;
max = level.zombie_total; max = level.zombie_total;
while ( true ) while ( true )
{ {
while ( get_zombie_dog_count() >= level.zombie_ai_limit || level.zombie_total <= 0 ) while ( get_zombie_dog_count() >= level.zombie_ai_limit || level.zombie_total <= 0 || level.intermission )
wait 0.1; wait 0.1;
for ( num_player_valid = get_number_of_valid_players(); get_zombie_dog_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() ) for ( num_player_valid = get_number_of_valid_players(); get_zombie_dog_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() )
@ -86,6 +77,10 @@ round_max()
round_start() round_start()
{ {
level.dog_targets = sys::getplayers();
for ( i = 0; i < level.dog_targets.size; i++ )
level.dog_targets[i].hunted_by = false;
level.music_round_override = 1; level.music_round_override = 1;
maps\mp\zombies\_zm_ai_dogs::dog_round_start(); maps\mp\zombies\_zm_ai_dogs::dog_round_start();
@ -94,7 +89,12 @@ round_start()
players = sys::getplayers(); players = sys::getplayers();
array_thread( players, maps\mp\zombies\_zm_ai_dogs::play_dog_round ); array_thread( players, maps\mp\zombies\_zm_ai_dogs::play_dog_round );
wait 1; wait 1;
playsoundatposition( game["zmbdialog"]["prefix"] + "_event_dogstart_0", ( 0, 0, 0 ) ); prefix = "vox_zmba";
if ( !level.sndannouncerisrich || level.script == "zm_prison" || level.script == "zm_tomb" )
{
prefix = "vox_zmba_sam";
}
playsoundatposition( prefix + "_event_dogstart_0", ( 0, 0, 0 ) );
wait 6; wait 6;
} }
@ -139,26 +139,16 @@ round_spawning_rush()
{ {
level endon( "end_of_round" ); level endon( "end_of_round" );
level endon( "intermission" ); level endon( "intermission" );
level.dog_targets = sys::getplayers();
for ( i = 0; i < level.dog_targets.size; i++ )
level.dog_targets[i].hunted_by = 0;
/# /#
level endon( "kill_round" ); level endon( "kill_round" );
if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 )
return;
#/ #/
if ( level.intermission )
return;
count = 0; count = 0;
max = level.zombie_total; max = level.zombie_total;
while ( true ) while ( true )
{ {
while ( get_zombie_dog_count() >= level.zombie_ai_limit || get_zombie_dog_count() >= getdvarint( "rm_dog_rush_max_dogs_alive" ) || level.zombie_total <= 0 ) while ( get_zombie_dog_count() >= level.zombie_ai_limit || get_zombie_dog_count() >= ( getdvarint( "rm_dog_rush_max_dogs_alive_per_player" ) * level.players.size )
|| level.zombie_total <= 0 || level.intermission )
wait 0.1; wait 0.1;
count = spawn_zombie_dog( count ); count = spawn_zombie_dog( count );
@ -175,7 +165,7 @@ round_max_rush()
dog_max += players.size * getdvarint( "rm_dog_rush_max_dogs_round_per_player" ); dog_max += players.size * getdvarint( "rm_dog_rush_max_dogs_round_per_player" );
dog_max *= int( level.round_number * getdvarfloat( "rm_dog_rush_max_dogs_round_number_multiplier" ) ); //dog_max *= int( level.round_number * getdvarfloat( "rm_dog_rush_max_dogs_round_number_multiplier" ) );
max = getdvarint( "rm_dog_rush_max_dogs_round" ); max = getdvarint( "rm_dog_rush_max_dogs_round" );
if ( dog_max > max ) if ( dog_max > max )
@ -247,9 +237,22 @@ waiting_for_next_dog_spawn_rush( count, max )
spawn_zombie_dog( count ) spawn_zombie_dog( count )
{ {
players = sys::getplayers(); ai = spawn_single_zombie_dog();
if ( isdefined( ai ) )
{
count++;
}
return count;
}
spawn_single_zombie_dog( starting_properties_struct )
{
favorite_enemy = maps\mp\zombies\_zm_ai_dogs::get_favorite_enemy(); favorite_enemy = maps\mp\zombies\_zm_ai_dogs::get_favorite_enemy();
ai = undefined;
if ( isdefined( level.dog_spawn_func ) ) if ( isdefined( level.dog_spawn_func ) )
{ {
spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy ); spawn_loc = [[ level.dog_spawn_func ]]( level.dog_spawners, favorite_enemy );
@ -260,7 +263,6 @@ spawn_zombie_dog( count )
ai.favoriteenemy = favorite_enemy; ai.favoriteenemy = favorite_enemy;
spawn_loc thread maps\mp\zombies\_zm_ai_dogs::dog_spawn_fx( ai, spawn_loc ); spawn_loc thread maps\mp\zombies\_zm_ai_dogs::dog_spawn_fx( ai, spawn_loc );
level.zombie_total--; level.zombie_total--;
count++;
} }
} }
else else
@ -273,12 +275,13 @@ spawn_zombie_dog( count )
ai.favoriteenemy = favorite_enemy; ai.favoriteenemy = favorite_enemy;
spawn_point thread maps\mp\zombies\_zm_ai_dogs::dog_spawn_fx( ai, spawn_point ); spawn_point thread maps\mp\zombies\_zm_ai_dogs::dog_spawn_fx( ai, spawn_point );
level.zombie_total--; level.zombie_total--;
count++;
flag_set( "dog_clips" ); flag_set( "dog_clips" );
} }
} }
return count; ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties_struct );
return ai;
} }
dog_spawn_sumpf_logic( dog_array, favorite_enemy ) dog_spawn_sumpf_logic( dog_array, favorite_enemy )

View File

@ -1,9 +0,0 @@
main()
{
}
preset_chance()
{
return true;
}

View File

@ -1,19 +0,0 @@
spawning_random()
{
}
spawning_chance()
{
}
spawning_limit()
{
}
spawning_cooldown()
{
}

View File

@ -20,6 +20,8 @@ init()
} }
level.zone_hud_y_offset = y; level.zone_hud_y_offset = y;
level.location_hud_y_offset = y - 20;
level thread command_thread(); level thread command_thread();
level thread on_player_connect(); level thread on_player_connect();
level thread draw_zombie_spawn_locations(); level thread draw_zombie_spawn_locations();
@ -101,6 +103,11 @@ on_player_connect()
level waittill( "connected", player ); level waittill( "connected", player );
player thread zone_hud(); player thread zone_hud();
player thread location_hud(); player thread location_hud();
player thread zombie_counter_hud();
if ( getdvarint( "zm_ai_pack_debug" ) > 0 )
{
level.zombie_vars[ "zombie_intermission_time" ] = 0.05;
}
} }
} }
@ -230,6 +237,52 @@ location_hud()
} }
} }
zombie_counter_hud()
{
self endon( "disconnect" );
x = 5;
y = level.location_hud_y_offset - 20;
text_hud = self new_debug_hud( x, y );
text_hud settext( "Zombies Left: " );
x += 75;
current_hud = self new_debug_hud( x, y );
x += 20;
plus_hud = self new_debug_hud( x, y );
plus_hud settext( " + " );
x += 20;
total_hud = self new_debug_hud( x, y );
flag_wait( "initial_blackscreen_passed" );
while ( !isdefined( level.zombie_total ) )
{
wait 1;
}
for (;;)
{
while ( getDvarInt( "zm_ai_pack_debug" ) <= 0 )
{
text_hud.alpha = 0;
current_hud.alpha = 0;
plus_hud.alpha = 0;
total_hud.alpha = 0;
wait 1;
}
text_hud.alpha = 1;
current_hud.alpha = 1;
plus_hud.alpha = 1;
total_hud.alpha = 1;
current_hud setvalue( get_current_zombie_count() );
total_hud setvalue( level.zombie_total );
wait 0.05;
}
}
draw_zombie_spawn_location_box( origin, color, vec = ( 20, 20, 40 ) ) draw_zombie_spawn_location_box( origin, color, vec = ( 20, 20, 40 ) )
{ {
box( origin + ( 0, 0, 20 ), vec * -1, vec, 0, color, 1.0 ); box( origin + ( 0, 0, 20 ), vec * -1, vec, 0, color, 1.0 );
@ -457,6 +510,8 @@ draw_nodes()
draw_node_data( node, color, type ); draw_node_data( node, color, type );
throttle_count++; throttle_count++;
} }
nodes = undefined;
wait 0.05; wait 0.05;
} }
} }
@ -496,3 +551,4 @@ print_entities()
} }
print( "Listed " + ents.size + " entities" ); print( "Listed " + ents.size + " entities" );
} }

View File

@ -51,7 +51,7 @@ main()
level.ai_data[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init; level.ai_data[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init;
level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb"; level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb";
level.ai_data[ "zombie_dog" ] = sys::spawnstruct(); level.ai_data[ "zombie_dog" ] = sys::spawnstruct();
level.ai_data[ "zombie_dog" ].main = maps\mp\zombies\_zm_ai_dogs::init; level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::init;
level.ai_data[ "zombie_dog" ].should_execute = level.gametype != "zstandard" ; level.ai_data[ "zombie_dog" ].should_execute = level.gametype != "zstandard" ;
keys = getArrayKeys( level.ai_data ); keys = getArrayKeys( level.ai_data );
@ -183,7 +183,7 @@ dotraverse_teleport( no_powerups )
startnode = self getnegotiationstartnode(); startnode = self getnegotiationstartnode();
if ( !isdefined( endnode ) || !isdefined( startnode ) ) if ( !isdefined( endnode ) || !isdefined( startnode ) )
{ {
print( "dotraverse_teleport() missing endnode or startnode" ); assertmsg( "dotraverse_teleport() missing endnode or startnode" );
return; return;
} }

View File

@ -77,8 +77,13 @@ script,scripts/zm/zm_ai_pack/rounds/_leaper.gsc
script,scripts/zm/zm_ai_pack/rounds/_mechz.gsc script,scripts/zm/zm_ai_pack/rounds/_mechz.gsc
script,scripts/zm/zm_ai_pack/rounds/_mixed.gsc script,scripts/zm/zm_ai_pack/rounds/_mixed.gsc
script,scripts/zm/zm_ai_pack/rounds/_normal.gsc script,scripts/zm/zm_ai_pack/rounds/_normal.gsc
script,scripts/zm/zm_ai_pack/rounds/_timed.gsc
script,scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc script,scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc
script,scripts/zm/zm_ai_pack/mixed_presets/_default.gsc
script,scripts/zm/zm_ai_pack/mixed_variants/_dog_wave.gsc
script,scripts/zm/zm_ai_pack/mixed_variants/_random.gsc
script,sys.gsc script,sys.gsc
script,pluto_sys.gsc script,pluto_sys.gsc