Dayz_HardCore/BotMissions/ZELENOGORSK_AI2.c

445 lines
24 KiB
C

class BotGroupMission_ZELENOGORSK_AI2: MissionBase
{
void BotGroupMission_ZELENOGORSK_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "2780.47 204.591 5309.4"; // set the spawn point of the bot
int m_botAcuracy = 10; // Setting the bot's accuracy (the higher the number, the more often the bot misses)
int BotSolderCountMin = 1; // assign the minimum number of bots
int BotSolderCountMax = 2; // assign the maximum number of bots
int botLootCountMin = 5; // set the minimum amount of loot for the bot
int botLootCountMax = 15; // assign the maximum amount of loot for the bot
float Zone_Radius = 1100; // Trigger radius for the player to spawn bots
bool isUseCheckPoints = true; // set whether checkpoints are used true - used, fslse - not used
bool isBotKaratist = true; // We set whether bots will carry weapons or will be fought with fists, by default they are with weapons, if needed without a firearm, write true
bool onRespawnBot = true; // Enable or disable bot respawn (true - enabled, fslse - disabled)
bool canUseTrigger = true; // Use trigger (true - enabled, fslse - disabled), if the trigger is not used, bots will spawn immediately after starting the server
bool useKilFeed = true; // Enabling or disabling alerts when killing a bot
bool m_Frendly = true; // Friendliness :) enable or disable. If enabled, then bots will not attack you until you attack it, if you attack a bot, you will become an enemy for all bots.
int rndFriendly = Math.RandomInt(0,1);
bool onVoice = true; // Enable or disable bot voice (enabling this setting causes more server load)
int m_spawnBotRadius = 400; // The radius of the spawn of bots in the territory, the center of the territory is the coordinate specified in BotSpawnPoint
int m_SpeedPatrol = 2; // Setting the movement speed while patrolling (min = 1 max = 3)
int rndTargetDist = Math.RandomInt( 100, 200 );
int m_TargetDist = rndTargetDist; // We set the distance in meters at which the bot sees the target.
bool canBotSpawned = true; // Do not change !!!!!!!
// ------------------------------- end of config ------------------------------------------ //
// Arrays with loot and clothes
// If some type is not needed, just leave empty quotes example ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"BDUJacket","BomberJacket_Black","BomberJacket_Blue","BomberJacket_Brown","BomberJacket_Grey","BomberJacket_Maroon","BomberJacket_Olive","BomberJacket_SkyBlue","ChernarusSportShirt",
"FirefighterJacket_Beige","FirefighterJacket_Black","GorkaEJacket_Flat","GorkaEJacket_PautRev","GorkaEJacket_Summer","HikingJacket_Black","HikingJacket_Blue","HikingJacket_Green",
"HikingJacket_Red","HuntingJacket_Autumn","HuntingJacket_Brown","HuntingJacket_Spring","HuntingJacket_Summer","HuntingJacket_Winter","JumpsuitJacket_Blue","JumpsuitJacket_Gray",
"JumpsuitJacket_Green","JumpsuitJacket_Red","LabCoat","LeatherJacket_Beige","LeatherJacket_Black","LeatherJacket_Brown","LeatherJacket_Natural","M65Jacket_Black","M65Jacket_Khaki",
"M65Jacket_Olive","M65Jacket_Tan","MedicalScrubsShirt_Blue","MedicalScrubsShirt_Green","MedicalScrubsShirt_White","ParamedicJacket_Blue","ParamedicJacket_Crimson","ParamedicJacket_Green",
"PoliceJacket","PoliceJacketOrel","PrisonUniformJacket","QuiltedJacket_Black","QuiltedJacket_Blue","QuiltedJacket_Green","QuiltedJacket_Grey","QuiltedJacket_Orange","QuiltedJacket_Red",
"QuiltedJacket_Violet","QuiltedJacket_Yellow","Raincoat_Black","Raincoat_Blue","Raincoat_Green","Raincoat_Orange","Raincoat_Pink","Raincoat_Red","Raincoat_Yellow","RidersJacket_Black",
"Shirt_BlueCheck","Shirt_BlueCheckBright","Shirt_GreenCheck","Shirt_PlaneBlack","Shirt_RedCheck","Shirt_WhiteCheck","Sweater_Blue","Sweater_Gray","Sweater_Green","Sweater_Red","TShirt_Beige",
"TShirt_Black","TShirt_Blue","TShirt_Green","TShirt_Grey","TShirt_OrangeWhiteStripes","TShirt_Red","TShirt_RedBlackStripes","TShirt_White","TacticalShirt_Black","TacticalShirt_Grey",
"TacticalShirt_Olive","TacticalShirt_Tan","TelnyashkaShirt","TrackSuitJacket_Black","TrackSuitJacket_Blue","TrackSuitJacket_Green","TrackSuitJacket_LightBlue","TrackSuitJacket_Red",
"TrackSuitPants_Black","TrackSuitPants_Blue","TrackSuitPants_Green","TrackSuitPants_LightBlue","TrackSuitPants_Red","WomanSuit_Beige","WomanSuit_Black","WomanSuit_Blue","WomanSuit_Brown",
"WomanSuit_DarkGrey","WomanSuit_Khaki","WomanSuit_LightGrey","WomanSuit_White","WoolCoat_Beige","WoolCoat_Black","WoolCoat_BlackCheck","WoolCoat_Blue","WoolCoat_BlueCheck","WoolCoat_BrownCheck",
"WoolCoat_Green","WoolCoat_GreyCheck","WoolCoat_Red","WoolCoat_RedCheck","MiniDress_BlueChecker","MiniDress_BlueWithDots","MiniDress_BrownChecker","MiniDress_GreenChecker","MiniDress_Pink",
"MiniDress_PinkChecker","MiniDress_RedChecker","MiniDress_WhiteChecker","NurseDress_Blue","NurseDress_White"}; //Add the top of the clothes
ref TStringArray Jeans = {"BDUPants","Breeches_Beetcheck","Breeches_Beige","Breeches_Black","Breeches_Blackcheck","Breeches_Blue","Breeches_Browncheck","Breeches_Green","Breeches_Pink",
"Breeches_Red","Breeches_White","CanvasPantsMidi_Beige","CanvasPantsMidi_Blue","CanvasPantsMidi_Grey","CanvasPantsMidi_Red","CanvasPantsMidi_Violet","CanvasPants_Beige",
"CanvasPants_Blue","CanvasPants_Grey","CanvasPants_Red","CanvasPants_Violet","CargoPants_Beige","CargoPants_Black","CargoPants_Blue","CargoPants_Green","CargoPants_Grey",
"FirefightersPants_Beige","FirefightersPants_Black","GorkaPants_Autumn","GorkaPants_Flat","GorkaPants_PautRev","GorkaPants_Summer","HunterPants_Autumn","HunterPants_Brown",
"HunterPants_Spring","HunterPants_Summer","HunterPants_Winter","Jeans_Black","Jeans_Blue","Jeans_BlueDark","Jeans_Brown","Jeans_Green","Jeans_Grey","LeatherPants_Beige",
"LeatherPants_Black","LeatherPants_Brown","LeatherPants_Natural","MedicalScrubsPants_Blue","MedicalScrubsPants_Green","MedicalScrubsPants_White","PolicePants","PolicePantsOrel",
"SlacksPants_Beige","SlacksPants_Black","SlacksPants_Blue","SlacksPants_Brown","SlacksPants_DarkGrey","SlacksPants_Khaki","SlacksPants_LightGrey","SlacksPants_White",
"TrackSuitPants_Black","TrackSuitPants_Blue","TrackSuitPants_Green","TrackSuitPants_LightBlue","TrackSuitPants_Red","USMCPants_Desert","USMCPants_Woodland"}; //Add pants
ref TStringArray Shoes = {"AthleticShoes_Black","AthleticShoes_Blue","AthleticShoes_Brown","AthleticShoes_Green","AthleticShoes_Grey","CombatBoots_Beige","CombatBoots_Black",
"CombatBoots_Brown","CombatBoots_Green","CombatBoots_Grey","DressShoes_Beige","DressShoes_Black","DressShoes_Brown","DressShoes_Sunburst","DressShoes_White",
"HikingBootsLow_Beige","HikingBootsLow_Black","HikingBootsLow_Blue","HikingBootsLow_Grey","HikingBoots_Black","HikingBoots_Brown","JoggingShoes_Black","JoggingShoes_Blue",
"JoggingShoes_Red","JoggingShoes_Violet","JoggingShoes_White","JungleBoots_Beige","JungleBoots_Black","JungleBoots_Brown","JungleBoots_Green","JungleBoots_Olive","LeatherShoes_Beige",
"LeatherShoes_Black","LeatherShoes_Brown","LeatherShoes_Natural","MilitaryBoots_Beige","MilitaryBoots_Black","MilitaryBoots_Bluerock","MilitaryBoots_Brown","MilitaryBoots_Redpunk",
"NBCBootsGray","NBCBootsYellow","Sneakers_Black","Sneakers_Gray","Sneakers_Green","Sneakers_Red","Sneakers_White","TTSKOBoots","Wellies_Black","Wellies_Brown","Wellies_Green","Wellies_Grey",
"WorkingBoots_Beige","WorkingBoots_Brown","WorkingBoots_Green","WorkingBoots_Grey","WorkingBoots_Yellow"}; //Add boots
ref TStringArray BackPack = {"AliceBag_Black","AliceBag_Camo","AliceBag_Green","AssaultBag_Black","AssaultBag_Green","AssaultBag_Ttsko","CoyoteBag_Brown",
"CoyoteBag_Green","HuntingBag","ImprovisedBag","LeatherSack_Beige","LeatherSack_Black","LeatherSack_Brown","LeatherSack_Natural",
"MountainBag_Green","MountainBag_Orange","MountainBag_Red","SmershBag","TaloonBag_Blue","TaloonBag_Green","TaloonBag_Orange",
"TaloonBag_Violet","TortillaBag","ChildBag_Blue","ChildBag_Green","ChildBag_Red","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; //Add the Backpack
ref TStringArray Vest = {"HuntingVest","LeatherStorageVest_Beige","LeatherStorageVest_Black","LeatherStorageVest_Brown",
"LeatherStorageVest_Natural","PlateCarrierVest","PressVest_Blue","PressVest_LightBlue","ReflexVest",
"SmershVest","UKAssVest_Black","UKAssVest_Camo","UKAssVest_Khaki","UKAssVest_Olive","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; //Add Vest
ref TStringArray Helm = {"Balaclava3Holes_Beige","Balaclava3Holes_Black","Balaclava3Holes_Blue","Balaclava3Holes_Green","BalaclavaMask_Beige","BalaclavaMask_Black","BalaclavaMask_Blackskull",
"BalaclavaMask_Blue","BalaclavaMask_Green","BalaclavaMask_Pink","BalaclavaMask_White","BallisticHelmet_Black","BallisticHelmet_Green","BallisticHelmet_UN","Bandana_Blackpattern",
"Bandana_Camopattern","Bandana_Greenpattern","Bandana_Polkapattern","Bandana_Redpattern","BaseballCap_Beige","BaseballCap_Black","BaseballCap_Blue","BaseballCap_CMMG_Black",
"BaseballCap_CMMG_Pink","BaseballCap_Camo","BaseballCap_Olive","BaseballCap_Pink","BaseballCap_Red","BeanieHat_Beige","BeanieHat_Black","BeanieHat_Blue","BeanieHat_Brown",
"BeanieHat_Green","BeanieHat_Grey","BeanieHat_Pink","BeanieHat_Red","BoonieHat_Black","BoonieHat_Blue","BoonieHat_DPM","BoonieHat_Dubok","BoonieHat_Flecktran","BoonieHat_NavyBlue",
"BoonieHat_Olive","BoonieHat_Orange","BoonieHat_Red","BoonieHat_Tan","ConstructionHelmet_Blue","ConstructionHelmet_Lime","ConstructionHelmet_Orange","ConstructionHelmet_Red",
"ConstructionHelmet_White","ConstructionHelmet_Yellow","CowboyHat_Brown","CowboyHat_black","CowboyHat_darkBrown","CowboyHat_green","DarkMotoHelmet_Black","DarkMotoHelmet_Blue",
"DarkMotoHelmet_Green","DarkMotoHelmet_Grey","DarkMotoHelmet_Lime","DarkMotoHelmet_Red","DarkMotoHelmet_White","DirtBikeHelmet_Black","DirtBikeHelmet_Blue","DirtBikeHelmet_Chernarus",
"DirtBikeHelmet_Green","DirtBikeHelmet_Khaki","DirtBikeHelmet_Mouthguard","DirtBikeHelmet_Police","DirtBikeHelmet_Red","DirtBikeHelmet_Visor","FlatCap_Black","FlatCap_BlackCheck",
"FlatCap_Blue","FlatCap_Brown","FlatCap_BrownCheck","FlatCap_Grey","FlatCap_GreyCheck","FlatCap_Red","GP5GasMask","GasMask","GorkaHelmet","Mich2001Helmet","MotoHelmet_Black",
"MotoHelmet_Blue","MotoHelmet_Green","MotoHelmet_Grey","MotoHelmet_Lime","MotoHelmet_Red","MotoHelmet_White","NioshFaceMask","OfficerHat","PilotkaCap","PoliceCap","PrisonerCap",
"RadarCap_Black","RadarCap_Blue","RadarCap_Brown","RadarCap_Green","RadarCap_Red","SkateHelmet_Black","SkateHelmet_Blue","SkateHelmet_Gray","SkateHelmet_Green","SkateHelmet_Red",
"TankerHelmet","Ushanka_Black","Ushanka_Blue","Ushanka_Green","WeldingMask","ZSh3PilotHelmet","ZmijovkaCap_Black","ZmijovkaCap_Blue","ZmijovkaCap_Brown","ZmijovkaCap_Green","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; //Add a helmet or headgear
ref TStringArray Gloves = {"LeatherGloves_Beige","LeatherGloves_Black","LeatherGloves_Brown","LeatherGloves_Natural","OMNOGloves_Brown","OMNOGloves_Gray",
"WorkingGloves_Beige","WorkingGloves_Black","WorkingGloves_Brown","WorkingGloves_Yellow","SurgicalGloves_Blue","SurgicalGloves_Green",
"SurgicalGloves_LightBlue","SurgicalGloves_White","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; //Add gloves
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt","","","","","","","","","","","","","","","",""}; //Add an additional item of clothing, it can be anything :)
ref TStringArray RandomLoot = {"Apple","AgaricusMushroom","AuriculariaMushroom","BakedBeansCan","Bitterlings","BoxCerealCrunchin","BrisketSpread","Canteen",
"CatFoodCan","Chips","Crackers","DogFoodCan","GreenBellPepper","Lunchmeat","Pajka","Pate","PeachesCan","Pear","Plum","Potato",
"PowderedMilk","Pumpkin","Rice","SaltySticks","SardinesCan","SlicedPumpkin","SodaCan_Cola","SodaCan_Fronta","SodaCan_Kvass",
"SodaCan_Pipsi","SodaCan_Spite","SpaghettiCan","TacticalBaconCan","Tomato","TunaCan","UnknownFoodCan","Zagorky","ZagorkyChocolate",
"ZagorkyPeanuts","Zucchini","BandageDressing","BarbedWire","Battery9V","BloodBagEmpty","BloodBagIV","BloodTestKit","BurlapSack",
"CanOpener","CharcoalTablets","Chemlight_Blue","Chemlight_Green","Chemlight_Red","Chemlight_White","Chemlight_Yellow","ChernarusMap",
"Compass","Crowbar","DisinfectantAlcohol","DisinfectantSpray","DuctTape","Epinephrine","EpoxyPutty","Fabric","FishingRod",
"Flashlight","GardenLime","Hacksaw","Hammer","HandSaw","HeadlightH7_Box","Headtorch_Black","Headtorch_Grey","Heatpack",
"ImprovisedFishingRod","IodineTincture","LargeGasCanister","LugWrench","Matchbox","MediumGasCanister","MetalWire","Morphine",
"NVGHeadstrap","NailBox","Netting","NylonKnifeSheath","OrienteeringCompass","PainkillerTablets","PersonalRadio","PetrolLighter",
"PipeWrench","Pliers","PortableGasLamp","PortableGasStove","Pot","PurificationTablets","Rangefinder","Roadflare","SalineBag",
"SalineBagIV","Screwdriver","SewingKit","SmallGasCanister","SparkPlug","StartKitIV","Stone","TetracyclineAntibiotics","Thermometer",
"VitaminBottle","WaterBottle","Whetstone","Wrench","XmasLights","AmmoBox_00buck_10rnd","AmmoBox_12gaRubberSlug_10Rnd","AmmoBox_12gaSlug_10Rnd",
"AmmoBox_22_50Rnd","AmmoBox_308WinTracer_20Rnd","AmmoBox_308Win_20Rnd","AmmoBox_357_20Rnd","AmmoBox_380_35rnd","AmmoBox_45ACP_25rnd",
"AmmoBox_545x39Tracer_20Rnd","AmmoBox_545x39_20Rnd","AmmoBox_556x45Tracer_20Rnd","AmmoBox_556x45_20Rnd","AmmoBox_762x39Tracer_20Rnd",
"AmmoBox_762x39_20Rnd","AmmoBox_762x54Tracer_20Rnd","AmmoBox_762x54_20Rnd","AmmoBox_9x19_25rnd","AmmoBox_9x39AP_20Rnd","AmmoBox_9x39_20Rnd",
"M18SmokeGrenade_Green","M18SmokeGrenade_Purple","M18SmokeGrenade_Red","M18SmokeGrenade_White","M18SmokeGrenade_Yellow","UniversalLight",
"PistolOptic","KashtanOptic","KazuarOptic","KobraOptic","KobraOptic","ACOGOptic_6x","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; //We add any loot to the array, the amount is not limited
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //Add melee weapons
// -------------------------------- end -------------------------------------------------------//
EntityAI itemEnt; // Do not change !!!!
// Function for creating checkpoints (register checkpoints here)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // Do not touch this line!
/* m_BotSolder.AddCheckpoint("13429.400391 5.890710 6028.540039");
m_BotSolder.AddCheckpoint("13380.400391 6.140470 6040.580078");
m_BotSolder.AddCheckpoint("13376.799805 6.140510 6130.660156");
m_BotSolder.AddCheckpoint("13404.700195 6.083950 6218.189941");
m_BotSolder.AddCheckpoint("13412.400391 5.780290 6245.870117");
m_BotSolder.AddCheckpoint("13425.799805 5.979890 6270.229980");
m_BotSolder.AddCheckpoint("13427.099609 6.382700 6348.950195");
m_BotSolder.AddCheckpoint("13464.400391 6.096580 6368.109863"); */
}
// ---------------------------------- end -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// The function of creating weapons for the bot (here you can add 7 weapon wmds, enter at your discretion)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //Weapon
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //Att 1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //Att 2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //Att 3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //Mag
break;
//We add body kits as needed, magazines for weapons are issued automatically, no need to add them
}
case 2:
{
m_BotSolder.AddWeapon("AKM");
m_BotSolder.AddWeaponAtt("AK_WoodBttstck");
m_BotSolder.AddWeaponAtt("AK_WoodHndgrd");
m_BotSolder.AddMagazine("Mag_AKM_Drum75Rnd");
break;
}
case 3:
{
m_BotSolder.AddWeapon("AKM");
m_BotSolder.AddWeaponAtt("AK_WoodBttstck");
m_BotSolder.AddWeaponAtt("AK_WoodHndgrd");
m_BotSolder.AddMagazine("Mag_AKM_Drum75Rnd");
break;
}
case 4:
{
m_BotSolder.AddWeapon("SVD");
m_BotSolder.AddMagazine("Mag_SVD_10Rnd");
break;
}
case 5:
{
m_BotSolder.AddWeapon("M4A1");
m_BotSolder.AddWeaponAtt("M4_RISHndgrd");
m_BotSolder.AddWeaponAtt("M4_MPBttstck");
m_BotSolder.AddWeaponAtt("ACOGOptic");
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd");
break;
}
case 6:
{
m_BotSolder.AddWeapon("AKM");
m_BotSolder.AddWeaponAtt("AK_WoodBttstck");
m_BotSolder.AddWeaponAtt("AK_WoodHndgrd");
m_BotSolder.AddMagazine("Mag_AKM_Drum75Rnd");
break;
}
case 7:
{
m_BotSolder.AddWeapon("AKM");
m_BotSolder.AddWeaponAtt("AK_WoodBttstck");
m_BotSolder.AddWeaponAtt("AK_WoodHndgrd");
m_BotSolder.AddMagazine("Mag_AKM_Drum75Rnd");
break;
}
}
}
// ----------------------------- end ------------------------------------- //
// Bot spawn function (we don't change anything here !!!)
void createBotUnit()
{
vector Navmesh;
vector botSpPos;
private SurvivorBotBase m_BotSolder;
ref TStringArray m_BotBody = { "BotM_Mirek", "BotM_Rolf", "BotM_Quinn", "BotM_Peter", "BotM_Oliver" };
PGFilter m_pgFilterNav = new PGFilter();
m_pgFilterNav.SetFlags(PGPolyFlags.WALK, PGPolyFlags.INSIDE, 0);
float bspX = BotSpawnPoint[0];
float bspY = BotSpawnPoint[2];
if (isUseCheckPoints)
botSpPos = Vector(bspX + Math.RandomInt(-7, 7), BotSpawnPoint[1], bspY + Math.RandomInt(-7, 7));
else
botSpPos = Vector(bspX + Math.RandomInt(-m_spawnBotRadius, m_spawnBotRadius), BotSpawnPoint[1], bspY + Math.RandomInt(-m_spawnBotRadius, m_spawnBotRadius));
bool IsNavmesh = world.SampleNavmeshPosition( botSpPos, 2, m_pgFilterNav, Navmesh );
if (IsNavmesh)
m_BotSolder = SurvivorBotBase.Cast(GetGame().CreatePlayer(null, m_BotBody.GetRandomElement(), Navmesh, 0, "NONE"));
else
m_BotSolder = SurvivorBotBase.Cast(GetGame().CreatePlayer(null, m_BotBody.GetRandomElement(), botSpPos, 0, "NONE"));
m_BotSolder.GetInventory().CreateInInventory(Shirt.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(Jeans.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(Shoes.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(BackPack.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(Vest.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(Helm.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(Gloves.GetRandomElement());
m_BotSolder.GetInventory().CreateInInventory(OtherEquip.GetRandomElement());
if (isBotKaratist)
m_BotSolder.GetHumanInventory().CreateInHands(MeleeWeap.GetRandomElement());
else
createWeapFromBot(m_BotSolder);
int rndLootCnt = Math.RandomInt(botLootCountMin, botLootCountMax);
for (int i = 0; i < rndLootCnt; i++)
{
itemEnt = m_BotSolder.GetInventory().CreateInInventory(RandomLoot.GetRandomElement());
if (itemEnt)
{
int rndHlt = Math.RandomInt(55,90);
itemEnt.SetHealth("","",rndHlt);
}
}
// if (rndFriendly == 0){
// m_Frendly = false;
// }
m_BotSolder.SetAcuracy(m_botAcuracy);
m_BotSolder.SetDistance(m_TargetDist);
m_BotSolder.SetUseVoice(onVoice);
m_BotSolder.SetUseKillFeed(useKilFeed);
m_BotSolder.SetFrendly(m_Frendly);
m_BotSolder.SetSpeedPatrol(m_SpeedPatrol);
if (isUseCheckPoints)
AddCeckPoint(m_BotSolder);
m_BotMass.Insert(m_BotSolder);
}
// ----------------------------- end ------------------------------------- //
// ----------------------------- Bots respawn function ----------------------------------------//
private void respawnBotUnitC1()
{
ref array<Man> players = new array<Man>;
GetGame().GetPlayers( players );
SurvivorBotBase Bot_Ar;
vector posB;
bool m_botRemoved = false;
float distB;
int m_countBot = m_BotMass.Count();
int plaersZoneCount = -1;
m_PlaersZoneArray.Clear();
if (canBotSpawned)
{
for ( int u = 0; u < players.Count(); u++ )
{
PlayerBase player;
Class.CastTo(player, players.Get(u));
vector pos = player.GetPosition();
float dist = vector.Distance( pos, BotSpawnPoint );
if ( dist < Zone_Radius && player.IsAlive() )
{
m_PlaersZoneArray.Insert(player);
// return;
}
}
Print("Players count in zone bots C1 = " + m_PlaersZoneArray.Count());
if (m_PlaersZoneArray.Count() == 0)
{
for ( int a = 0; a < m_countBot; a++ )
{
Bot_Ar = m_BotMass.Get(a);
if (Bot_Ar)
{
if (!Bot_Ar.IsAlive())
{
posB = Bot_Ar.GetPosition();
distB = vector.Distance( posB, BotSpawnPoint );
if (distB < Zone_Radius)
{
m_BotMass.Remove( a );
}
if (m_BotMass.Count() == 0)
m_botRemoved = true;
}
else
{
if (distB < Zone_Radius)
{
m_BotMass.Remove( a );
GetGame().ObjectDelete( Bot_Ar );
}
if (m_BotMass.Count() == 0)
m_botRemoved = true;
}
}
}
if (m_botRemoved && m_PlaersZoneArray.Count() == 0)
{
StartMissionAI();
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(respawnBotUnitC1);
m_botRemoved = false;
}
}
}
}
// ----------------------------- end ----------------------------------------//
// Spawn function of a group of bots
int delaySpawn = 0;
void spawnBotGroup()
{
int rndBotGrpCnt = Math.RandomInt(BotSolderCountMin, BotSolderCountMax);
Print("Bots spawned! Count " + rndBotGrpCnt);
for (int a = 0; a < rndBotGrpCnt; a++)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(createBotUnit, 500 + delaySpawn);
delaySpawn +=1000;
}
}
// --------------------------------------- end --------------------------------------- //
// Player trigger function
void TriggerPlayersC1()
{
ref array<Man> players = new array<Man>;
GetGame().GetPlayers( players );
delaySpawn = 0;
if (canBotSpawned && IsGoodSrvFps())
{
for ( int u = 0; u < players.Count(); u++ )
{
PlayerBase player;
Class.CastTo(player, players.Get(u));
vector pos = player.GetPosition();
float dist = vector.Distance( pos, BotSpawnPoint );
if ( dist < Zone_Radius && !player.IsBot() )
{
spawnBotGroup();
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(TriggerPlayersC1);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitC1, 60000, true);
}
}
}
}
// --------------------------------------- end --------------------------------------- //
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersC1, 5000, true);
}
else if (IsGoodSrvFps())
{
spawnBotGroup();
}
}
bool IsGoodSrvFps()
{
float TestFpsSrv = GetGame().GetFps();
if (TestFpsSrv < 2)
{
return true;
}
else
{
Print("Server FPS low! FPS = " + TestFpsSrv + " Bots not respawned!");
return false;
}
}
}