Added Custom AI missions

This commit is contained in:
2021-11-28 12:59:34 -07:00
parent 59397a38d3
commit 345f9f73bb
36 changed files with 15353 additions and 0 deletions

445
BotMissions/BEREZINO_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_BEREZINO_AI1: MissionBase
{
void BotGroupMission_BEREZINO_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "12433.6 8.29782 9514.96"; // 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;
}
}
}

445
BotMissions/BEREZINO_AI2.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_BEREZINO_AI2: MissionBase
{
void BotGroupMission_BEREZINO_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "12800.9 5.96536 10167"; // 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;
}
}
}

445
BotMissions/CERNAYA_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_CERNAYA_AI1: MissionBase
{
void BotGroupMission_CERNAYA_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "12113 95.3387 13696.2"; // 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 = 3; // 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;
}
}
}

445
BotMissions/CERNAYA_AI2.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_CERNAYA_AI2: MissionBase
{
void BotGroupMission_CERNAYA_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "12150.9 93.3948 13863.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 = 3; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_KARMANOVKA_AI1: MissionBase
{
void BotGroupMission_KARMANOVKA_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "12801.1 99.4634 14685.9"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_KRASNOSTAV_AI1: MissionBase
{
void BotGroupMission_KRASNOSTAV_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "11873.4 140.14 12555.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 = 3; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_KRASNOSTAV_AI2: MissionBase
{
void BotGroupMission_KRASNOSTAV_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "11180.1 197.023 12250.6"; // 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 = 3; // 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;
}
}
}

445
BotMissions/NOVAYA_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVAYA_AI1: MissionBase
{
void BotGroupMission_NOVAYA_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "3392.02 195.989 12977.9"; // 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;
}
}
}

445
BotMissions/NOVAYA_AI2.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVAYA_AI2: MissionBase
{
void BotGroupMission_NOVAYA_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "3497.45 220.141 12513.7"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVODMITROVSK_AI1: MissionBase
{
void BotGroupMission_NOVODMITROVSK_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "11643.4 36.921 143563.8"; // 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 = 2; // assign the minimum number of bots
int BotSolderCountMax = 4; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVODMITROVSK_AI2: MissionBase
{
void BotGroupMission_NOVODMITROVSK_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "11547.1 58.5597 14763.2"; // 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 = 2; // assign the minimum number of bots
int BotSolderCountMax = 4; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVODMITROVSK_AI3: MissionBase
{
void BotGroupMission_NOVODMITROVSK_AI3() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "10851.5 58.8202 14462.3"; // 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 = 2; // assign the minimum number of bots
int BotSolderCountMax = 4; // 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;
}
}
}

445
BotMissions/NOVY_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_NOVY_AI1: MissionBase
{
void BotGroupMission_NOVY_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "7034.28 295.931 7671.95"; // 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;
}
}
}

View File

@ -0,0 +1,361 @@
class BotGroupMissionC1: MissionBase
{
void BotGroupMissionC1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "7852.263672 6.132144 3174.178955"; // 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 = 3; // assign the minimum number of bots
int BotSolderCountMax = 4; // 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 = false; // 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.
bool onVoice = true; // Enable or disable bot voice (enabling this setting causes more server load)
int m_spawnBotRadius = 100; // The radius of the spawn of bots in the territory, the center of the territory is the coordinate specified in BotSpawnPoint
int m_SpeedPatrol = 3; // Setting the movement speed while patrolling (min = 1 max = 3)
int m_TargetDist = 100; // 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 = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //Add the top of the clothes
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //Add pants
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //Add boots
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //Add the Backpack
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //Add Vest
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //Add a helmet or headgear
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //Add gloves
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //Add an additional item of clothing, it can be anything :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //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("1724.632080 451.730408 14298.412109");
}
// ---------------------------------- 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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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;
}
}
}

View File

@ -0,0 +1,362 @@
class BotGroupMissionC2: MissionBase
{
void BotGroupMissionC2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "10524.090820 6.012439 2254.700928"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 1100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitC2()
{
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 C2 = " + 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(respawnBotUnitC2);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersC2()
{
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(TriggerPlayersC2);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitC2, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersC2, 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;
}
}
}

View File

@ -0,0 +1,361 @@
class BotGroupMissionC3: MissionBase
{
void BotGroupMissionC3() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "13458.015625 6.142386 6240.619629"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 1100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitC3()
{
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 C3 = " + 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(respawnBotUnitC3);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersC3()
{
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(TriggerPlayersC3);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitC3, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersC3, 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;
}
}
}

View File

@ -0,0 +1,362 @@
class BotGroupMissionC4: MissionBase
{
void BotGroupMissionC4() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "12903.678711 6.002323 10089.592773"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 1100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitC4()
{
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 C4 = " + 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(respawnBotUnitC4);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersC4()
{
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(TriggerPlayersC4);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitC4, 5000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersC4, 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;
}
}
}

View File

@ -0,0 +1,361 @@
class BotGroupMissionKab: MissionBase
{
void BotGroupMissionKab() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "4541.687500 317.593628 8324.727539"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 150; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 30; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitKab(SurvivorBotBase m_Bot)
{
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 VMC = " + 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(respawnBotUnitKab);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersKab()
{
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(TriggerPlayersKab);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitKab, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersKab, 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;
}
}
}

View File

@ -0,0 +1,363 @@
class BotGroupMissionNWA: MissionBase
{
void BotGroupMissionNWA() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "4271.261719 338.812531 10975.101563"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 1100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 200; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("4269.994629 339.012421 10917.826172");
m_BotSolder.AddCheckpoint("4474.135254 339.012421 10557.146484");
m_BotSolder.AddCheckpoint("4321.004883 339.012390 10459.886719");
m_BotSolder.AddCheckpoint("4113.722656 339.012451 10837.003906");
m_BotSolder.AddCheckpoint("4081.802979 339.012451 10801.938477");
m_BotSolder.AddCheckpoint("4775.959961 338.970398 9591.289063");
m_BotSolder.AddCheckpoint("5074.371582 339.012421 9760.172852");
m_BotSolder.AddCheckpoint("5042.200195 339.012390 9880.341797");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitNWA()
{
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 NWA = " + 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(respawnBotUnitNWA);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersNWA()
{
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(TriggerPlayersNWA);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitNWA, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersNWA, 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 spawned!");
return false;
}
}
}

View File

@ -0,0 +1,418 @@
class BotGroupMissionPav: MissionBase
{
void BotGroupMissionPav() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "2126.428467 91.449623 3342.416016"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 500; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
m_BotSolder.AddCheckpoint("1681.035522 451.784302 14278.791016");
m_BotSolder.AddCheckpoint("1668.385742 451.730408 14268.739258");
m_BotSolder.AddCheckpoint("1653.012695 451.784302 14245.443359");
m_BotSolder.AddCheckpoint("1662.009521 451.784302 14220.044922");
m_BotSolder.AddCheckpoint("1668.885010 451.730408 14177.100586");
m_BotSolder.AddCheckpoint("1678.905029 451.784302 14134.460938");
m_BotSolder.AddCheckpoint("1687.656250 451.784302 14097.293945");
m_BotSolder.AddCheckpoint("1691.055054 451.728760 14072.710938");
m_BotSolder.AddCheckpoint("1697.563721 450.094635 14019.088867");
m_BotSolder.AddCheckpoint("1701.266235 448.636108 13981.079102");
m_BotSolder.AddCheckpoint("1709.151733 448.368225 13969.950195");
m_BotSolder.AddCheckpoint("1726.191772 447.882568 13954.740234");
m_BotSolder.AddCheckpoint("1734.303101 447.342072 13945.562500");
m_BotSolder.AddCheckpoint("1736.849487 447.158569 13939.061523");
m_BotSolder.AddCheckpoint("1803.257568 436.318970 13812.399414");
m_BotSolder.AddCheckpoint("1802.478149 435.682281 13794.238281");
m_BotSolder.AddCheckpoint("1764.742676 434.271759 13667.715820");
m_BotSolder.AddCheckpoint("1753.983521 434.111572 13660.847656");
m_BotSolder.AddCheckpoint("1697.765381 433.031982 13621.431641");
m_BotSolder.AddCheckpoint("1625.751953 437.192169 13583.775391");
m_BotSolder.AddCheckpoint("1615.443726 437.193420 13582.367188");
m_BotSolder.AddCheckpoint("1586.155762 439.010864 13609.286133");
m_BotSolder.AddCheckpoint("1566.816040 441.081787 13643.261719");
m_BotSolder.AddCheckpoint("1554.550049 441.587372 13645.919922");
m_BotSolder.AddCheckpoint("1533.254028 440.683624 13646.856445");
m_BotSolder.AddCheckpoint("1470.583130 444.685120 13679.353516");
m_BotSolder.AddCheckpoint("1448.422729 446.229736 13681.502930");
m_BotSolder.AddCheckpoint("1397.534424 448.255707 13663.409180");
m_BotSolder.AddCheckpoint("1377.747681 448.799530 13661.333984");
m_BotSolder.AddCheckpoint("1356.402222 451.658264 13669.961914");
m_BotSolder.AddCheckpoint("1339.632813 454.855988 13690.362305");
m_BotSolder.AddCheckpoint("1311.232178 457.548615 13730.733398");
m_BotSolder.AddCheckpoint("1368.332275 455.560181 13762.721680");
m_BotSolder.AddCheckpoint("1389.098022 453.795563 13785.572266");
m_BotSolder.AddCheckpoint("1394.411499 451.237183 13801.572266");
m_BotSolder.AddCheckpoint("1398.934204 451.644989 13828.162109");
m_BotSolder.AddCheckpoint("1419.962524 456.061951 13891.482422");
m_BotSolder.AddCheckpoint("1409.579224 458.430359 13947.408203");
m_BotSolder.AddCheckpoint("1421.006104 459.254517 13993.981445");
m_BotSolder.AddCheckpoint("1422.121094 459.807831 14022.114258");
m_BotSolder.AddCheckpoint("1388.509277 462.222443 14044.217773");
m_BotSolder.AddCheckpoint("1388.548340 462.354797 14044.183594");
m_BotSolder.AddCheckpoint("1333.772217 463.948151 14062.096680");
m_BotSolder.AddCheckpoint("1350.346069 465.658081 14107.701172");
m_BotSolder.AddCheckpoint("1461.509521 459.874268 14133.793945");
m_BotSolder.AddCheckpoint("1503.123291 455.995056 14137.425781");
m_BotSolder.AddCheckpoint("1554.196045 452.867004 14107.243164");
m_BotSolder.AddCheckpoint("1574.911743 452.540283 14100.198242");
m_BotSolder.AddCheckpoint("1629.664673 451.792175 14197.793945");
m_BotSolder.AddCheckpoint("1636.238647 451.792175 14221.260742");
m_BotSolder.AddCheckpoint("1671.278564 451.792175 14275.020508");
m_BotSolder.AddCheckpoint("1645.910522 451.807617 14315.247070");
m_BotSolder.AddCheckpoint("1669.397339 451.792175 14331.668945");
m_BotSolder.AddCheckpoint("1685.370361 451.792175 14341.243164");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitPav()
{
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 Pavlovo = " + 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)
{
posB = Bot_Ar.GetPosition();
distB = vector.Distance( posB, BotSpawnPoint );
if (!Bot_Ar.IsAlive())
{
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(respawnBotUnitPav);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersPav()
{
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(TriggerPlayersPav);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitPav, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersPav, 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 spawned!");
return false;
}
}
}

View File

@ -0,0 +1,415 @@
class BotGroupMissionTisy: MissionBase
{
void BotGroupMissionTisy() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "1664.315552 453.742462 14263.407227"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 1100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
m_BotSolder.AddCheckpoint("1681.035522 451.784302 14278.791016");
m_BotSolder.AddCheckpoint("1668.385742 451.730408 14268.739258");
m_BotSolder.AddCheckpoint("1653.012695 451.784302 14245.443359");
m_BotSolder.AddCheckpoint("1662.009521 451.784302 14220.044922");
m_BotSolder.AddCheckpoint("1668.885010 451.730408 14177.100586");
m_BotSolder.AddCheckpoint("1678.905029 451.784302 14134.460938");
m_BotSolder.AddCheckpoint("1687.656250 451.784302 14097.293945");
m_BotSolder.AddCheckpoint("1691.055054 451.728760 14072.710938");
m_BotSolder.AddCheckpoint("1697.563721 450.094635 14019.088867");
m_BotSolder.AddCheckpoint("1701.266235 448.636108 13981.079102");
m_BotSolder.AddCheckpoint("1709.151733 448.368225 13969.950195");
m_BotSolder.AddCheckpoint("1726.191772 447.882568 13954.740234");
m_BotSolder.AddCheckpoint("1734.303101 447.342072 13945.562500");
m_BotSolder.AddCheckpoint("1736.849487 447.158569 13939.061523");
m_BotSolder.AddCheckpoint("1803.257568 436.318970 13812.399414");
m_BotSolder.AddCheckpoint("1802.478149 435.682281 13794.238281");
m_BotSolder.AddCheckpoint("1764.742676 434.271759 13667.715820");
m_BotSolder.AddCheckpoint("1753.983521 434.111572 13660.847656");
m_BotSolder.AddCheckpoint("1697.765381 433.031982 13621.431641");
m_BotSolder.AddCheckpoint("1625.751953 437.192169 13583.775391");
m_BotSolder.AddCheckpoint("1615.443726 437.193420 13582.367188");
m_BotSolder.AddCheckpoint("1586.155762 439.010864 13609.286133");
m_BotSolder.AddCheckpoint("1566.816040 441.081787 13643.261719");
m_BotSolder.AddCheckpoint("1554.550049 441.587372 13645.919922");
m_BotSolder.AddCheckpoint("1533.254028 440.683624 13646.856445");
m_BotSolder.AddCheckpoint("1470.583130 444.685120 13679.353516");
m_BotSolder.AddCheckpoint("1448.422729 446.229736 13681.502930");
m_BotSolder.AddCheckpoint("1397.534424 448.255707 13663.409180");
m_BotSolder.AddCheckpoint("1377.747681 448.799530 13661.333984");
m_BotSolder.AddCheckpoint("1356.402222 451.658264 13669.961914");
m_BotSolder.AddCheckpoint("1339.632813 454.855988 13690.362305");
m_BotSolder.AddCheckpoint("1311.232178 457.548615 13730.733398");
m_BotSolder.AddCheckpoint("1368.332275 455.560181 13762.721680");
m_BotSolder.AddCheckpoint("1389.098022 453.795563 13785.572266");
m_BotSolder.AddCheckpoint("1394.411499 451.237183 13801.572266");
m_BotSolder.AddCheckpoint("1398.934204 451.644989 13828.162109");
m_BotSolder.AddCheckpoint("1419.962524 456.061951 13891.482422");
m_BotSolder.AddCheckpoint("1409.579224 458.430359 13947.408203");
m_BotSolder.AddCheckpoint("1421.006104 459.254517 13993.981445");
m_BotSolder.AddCheckpoint("1422.121094 459.807831 14022.114258");
m_BotSolder.AddCheckpoint("1388.509277 462.222443 14044.217773");
m_BotSolder.AddCheckpoint("1388.548340 462.354797 14044.183594");
m_BotSolder.AddCheckpoint("1333.772217 463.948151 14062.096680");
m_BotSolder.AddCheckpoint("1350.346069 465.658081 14107.701172");
m_BotSolder.AddCheckpoint("1461.509521 459.874268 14133.793945");
m_BotSolder.AddCheckpoint("1503.123291 455.995056 14137.425781");
m_BotSolder.AddCheckpoint("1554.196045 452.867004 14107.243164");
m_BotSolder.AddCheckpoint("1574.911743 452.540283 14100.198242");
m_BotSolder.AddCheckpoint("1629.664673 451.792175 14197.793945");
m_BotSolder.AddCheckpoint("1636.238647 451.792175 14221.260742");
m_BotSolder.AddCheckpoint("1671.278564 451.792175 14275.020508");
m_BotSolder.AddCheckpoint("1645.910522 451.807617 14315.247070");
m_BotSolder.AddCheckpoint("1669.397339 451.792175 14331.668945");
m_BotSolder.AddCheckpoint("1685.370361 451.792175 14341.243164");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnit()
{
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 Tisy = " + 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(respawnBotUnit);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayers()
{
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(TriggerPlayers);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnit, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayers, 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;
}
}
}

View File

@ -0,0 +1,367 @@
class BotGroupMissionTroick: MissionBase
{
void BotGroupMissionTroick() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "7928.453613 337.658356 14597.561523"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 700; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 50; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("7908.396484 337.337708 14612.336914");
m_BotSolder.AddCheckpoint("7906.007324 338.781555 14654.738281");
m_BotSolder.AddCheckpoint("7927.181152 339.171600 14657.208008");
m_BotSolder.AddCheckpoint("7926.386230 338.485382 14639.730469");
m_BotSolder.AddCheckpoint("7937.773926 338.512451 14638.373047");
m_BotSolder.AddCheckpoint("7943.151855 338.512451 14626.012695");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!)
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitTroick()
{
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 Troick = " + 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(respawnBotUnitTroick);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersTroick()
{
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(TriggerPlayersTroick);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitTroick, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersTroick, 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;
}
}
}

View File

@ -0,0 +1,413 @@
class BotGroupMissionZel: MissionBase
{
void BotGroupMissionZel() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
vector BotSpawnPoint = "2491.912842 193.367706 5081.337891"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_botAcuracy = 10; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int BotSolderCountMin = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int BotSolderCountMax = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
int botLootCountMin = 5; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
int botLootCountMax = 15; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
float Zone_Radius = 500; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool isUseCheckPoints = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isBotKaratist = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
bool onRespawnBot = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool canUseTrigger = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, fslse - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool useKilFeed = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_Frendly = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool onVoice = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_spawnBotRadius = 30; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> BotSpawnPoint
int m_SpeedPatrol = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (min = 1 max = 3)
int m_TargetDist = 100; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
bool canBotSpawned = true; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!!!!
// ------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------------ //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---> TStringArray OtherEquip = {""};
ref TStringArray Shirt = {"GorkaEJacket_Autumn", "GorkaEJacket_Flat", "GorkaEJacket_PautRev", "GorkaEJacket_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Jeans = {"GorkaPants_Autumn", "GorkaPants_Flat", "GorkaPants_PautRev", "GorkaPants_Summer"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Shoes = {"TTSKOBoots", "WorkingBoots_Beige", "CombatBoots_Beige", "CombatBoots_Black", "CombatBoots_Brown"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray BackPack = {"CoyoteBag_Brown", "CoyoteBag_Green", "HuntingBag", "TortillaBag", "WaterproofBag_Green"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Vest = {"HighCapacityVest_Black", "HighCapacityVest_Olive", "HuntingVest", "PlateCarrierVest", "UKAssVest_Camo"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray Helm = {"GorkaHelmet", "Mich2001Helmet", "MotoHelmet_Black", "PumpkinHelmet", "SkateHelmet_Black"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ref TStringArray Gloves = {"WorkingGloves_Beige", "WorkingGloves_Black", "NBCGlovesGray", "OMNOGloves_Brown", "SurgicalGloves_Blue"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray OtherEquip = {"CivilianBelt", "MilitaryBelt"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :)
ref TStringArray RandomLoot = {"SardinesCan", "SodaCan_Cola", "SodaCan_Kvass", "Rice", "Rope", "Screwdriver", "AmmoBox_545x39_20Rnd"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ref TStringArray MeleeWeap = {"WoodAxe", "FirefighterAxe", "Shovel", "Pickaxe"}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// -------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -------------------------------------------------------//
EntityAI itemEnt; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
void AddCeckPoint(SurvivorBotBase m_BotSolder)
{
m_BotSolder.SetUseCheckpoint(); // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
m_BotSolder.AddCheckpoint("1724.632080 451.730408 14298.412109");
m_BotSolder.AddCheckpoint("1681.035522 451.784302 14278.791016");
m_BotSolder.AddCheckpoint("1668.385742 451.730408 14268.739258");
m_BotSolder.AddCheckpoint("1653.012695 451.784302 14245.443359");
m_BotSolder.AddCheckpoint("1662.009521 451.784302 14220.044922");
m_BotSolder.AddCheckpoint("1668.885010 451.730408 14177.100586");
m_BotSolder.AddCheckpoint("1678.905029 451.784302 14134.460938");
m_BotSolder.AddCheckpoint("1687.656250 451.784302 14097.293945");
m_BotSolder.AddCheckpoint("1691.055054 451.728760 14072.710938");
m_BotSolder.AddCheckpoint("1697.563721 450.094635 14019.088867");
m_BotSolder.AddCheckpoint("1701.266235 448.636108 13981.079102");
m_BotSolder.AddCheckpoint("1709.151733 448.368225 13969.950195");
m_BotSolder.AddCheckpoint("1726.191772 447.882568 13954.740234");
m_BotSolder.AddCheckpoint("1734.303101 447.342072 13945.562500");
m_BotSolder.AddCheckpoint("1736.849487 447.158569 13939.061523");
m_BotSolder.AddCheckpoint("1803.257568 436.318970 13812.399414");
m_BotSolder.AddCheckpoint("1802.478149 435.682281 13794.238281");
m_BotSolder.AddCheckpoint("1764.742676 434.271759 13667.715820");
m_BotSolder.AddCheckpoint("1753.983521 434.111572 13660.847656");
m_BotSolder.AddCheckpoint("1697.765381 433.031982 13621.431641");
m_BotSolder.AddCheckpoint("1625.751953 437.192169 13583.775391");
m_BotSolder.AddCheckpoint("1615.443726 437.193420 13582.367188");
m_BotSolder.AddCheckpoint("1586.155762 439.010864 13609.286133");
m_BotSolder.AddCheckpoint("1566.816040 441.081787 13643.261719");
m_BotSolder.AddCheckpoint("1554.550049 441.587372 13645.919922");
m_BotSolder.AddCheckpoint("1533.254028 440.683624 13646.856445");
m_BotSolder.AddCheckpoint("1470.583130 444.685120 13679.353516");
m_BotSolder.AddCheckpoint("1448.422729 446.229736 13681.502930");
m_BotSolder.AddCheckpoint("1397.534424 448.255707 13663.409180");
m_BotSolder.AddCheckpoint("1377.747681 448.799530 13661.333984");
m_BotSolder.AddCheckpoint("1356.402222 451.658264 13669.961914");
m_BotSolder.AddCheckpoint("1339.632813 454.855988 13690.362305");
m_BotSolder.AddCheckpoint("1311.232178 457.548615 13730.733398");
m_BotSolder.AddCheckpoint("1368.332275 455.560181 13762.721680");
m_BotSolder.AddCheckpoint("1389.098022 453.795563 13785.572266");
m_BotSolder.AddCheckpoint("1394.411499 451.237183 13801.572266");
m_BotSolder.AddCheckpoint("1398.934204 451.644989 13828.162109");
m_BotSolder.AddCheckpoint("1419.962524 456.061951 13891.482422");
m_BotSolder.AddCheckpoint("1409.579224 458.430359 13947.408203");
m_BotSolder.AddCheckpoint("1421.006104 459.254517 13993.981445");
m_BotSolder.AddCheckpoint("1422.121094 459.807831 14022.114258");
m_BotSolder.AddCheckpoint("1388.509277 462.222443 14044.217773");
m_BotSolder.AddCheckpoint("1388.548340 462.354797 14044.183594");
m_BotSolder.AddCheckpoint("1333.772217 463.948151 14062.096680");
m_BotSolder.AddCheckpoint("1350.346069 465.658081 14107.701172");
m_BotSolder.AddCheckpoint("1461.509521 459.874268 14133.793945");
m_BotSolder.AddCheckpoint("1503.123291 455.995056 14137.425781");
m_BotSolder.AddCheckpoint("1554.196045 452.867004 14107.243164");
m_BotSolder.AddCheckpoint("1574.911743 452.540283 14100.198242");
m_BotSolder.AddCheckpoint("1629.664673 451.792175 14197.793945");
m_BotSolder.AddCheckpoint("1636.238647 451.792175 14221.260742");
m_BotSolder.AddCheckpoint("1671.278564 451.792175 14275.020508");
m_BotSolder.AddCheckpoint("1645.910522 451.807617 14315.247070");
m_BotSolder.AddCheckpoint("1669.397339 451.792175 14331.668945");
m_BotSolder.AddCheckpoint("1685.370361 451.792175 14341.243164");
}
// ---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------- /
ref array<SurvivorBotBase> m_BotMass = new array<SurvivorBotBase>;
ref array<SurvivorBotBase> m_PlaersZoneArray = new array<SurvivorBotBase>;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void createWeapFromBot(SurvivorBotBase m_BotSolder)
{
int randomWeapon = Math.RandomInt(1, 7);
switch( randomWeapon )
{
case 1:
{
m_BotSolder.AddWeapon("M4A1"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_BotSolder.AddWeaponAtt("M4_RISHndgrd"); //<2F><><EFBFBD><EFBFBD><EFBFBD>1
m_BotSolder.AddWeaponAtt("M4_MPBttstck"); //<2F><><EFBFBD><EFBFBD><EFBFBD>2
m_BotSolder.AddWeaponAtt("ACOGOptic"); //<2F><><EFBFBD><EFBFBD><EFBFBD>3
m_BotSolder.AddMagazine("Mag_STANAG_30Rnd"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
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;
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------- //
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,100);
itemEnt.SetHealth("","",rndHlt);
}
}
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);
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ------------------------------------- //
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
private void respawnBotUnitZel()
{
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 Zelenogorsk = " + 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(respawnBotUnitZel);
m_botRemoved = false;
}
}
}
}
// ----------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------------//
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
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;
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TriggerPlayersZel()
{
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(TriggerPlayersZel);
if (onRespawnBot)
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(respawnBotUnitZel, 60000, true);
}
}
}
}
// --------------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------------- //
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> initBotMissions.c
void StartMissionAI()
{
Print("Start mission bot");
if (canUseTrigger)
{
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TriggerPlayersZel, 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;
}
}
}

445
BotMissions/PUSTOSKKA_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_PUSTOSKKA_AI1: MissionBase
{
void BotGroupMission_PUSTOSKKA_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "3048.44 312.137 7859.27"; // 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;
}
}
}

445
BotMissions/STARY_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_STARY_AI1: MissionBase
{
void BotGroupMission_STARY_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "6105.67 301.141 7712.44"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_SVETLOJARSK_AI1: MissionBase
{
void BotGroupMission_SVETLOJARSK_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "13826.1 19.8318 13307"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_SVETLOJARSK_AI2: MissionBase
{
void BotGroupMission_SVETLOJARSK_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "13984 3.43051 13492.3"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_SVETLOJARSK_AI3: MissionBase
{
void BotGroupMission_SVETLOJARSK_AI3() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "14072.6 9.4294 13135.3"; // 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;
}
}
}

445
BotMissions/VYBORAIR_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBORAIR_AI1: MissionBase
{
void BotGroupMission_VYBORAIR_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "4201.55 338.551 11033"; // 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;
}
}
}

445
BotMissions/VYBORAIR_AI2.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBORAIR_AI2: MissionBase
{
void BotGroupMission_VYBORAIR_AI2() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "4479.32 339.013 10837.3"; // 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;
}
}
}

445
BotMissions/VYBORAIR_AI3.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBORAIR_AI3: MissionBase
{
void BotGroupMission_VYBORAIR_AI3() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "4639.27 339.14 10420.5"; // 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;
}
}
}

445
BotMissions/VYBORAIR_AI4.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBORAIR_AI4: MissionBase
{
void BotGroupMission_VYBORAIR_AI4() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "4844.06 339.189 10388.3"; // 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;
}
}
}

445
BotMissions/VYBORAIR_AI5.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBORAIR_AI5: MissionBase
{
void BotGroupMission_VYBORAIR_AI5() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "4484.58 339.14 9597.23"; // 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;
}
}
}

445
BotMissions/VYBOR_AI1.c Normal file
View File

@ -0,0 +1,445 @@
class BotGroupMission_VYBOR_AI1: MissionBase
{
void BotGroupMission_VYBOR_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "3802.67 311.141 88939.75"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
class BotGroupMission_ZELENOGORSK_AI1: MissionBase
{
void BotGroupMission_ZELENOGORSK_AI1() { StartMissionAI(); }
AIWorld world = GetGame().GetWorld().GetAIWorld();
// Bot configs
vector BotSpawnPoint = "2486.24 190.34 5152.9"; // 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;
}
}
}

View File

@ -0,0 +1,445 @@
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;
}
}
}