Advertisement
sasaa86

ZombieHordes.c

Dec 17th, 2018
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3. Add this to the top of init.c:
  4. #include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\InfectedHordes.c"
  5.  
  6. Add this inside override void OnInit() in init.c
  7. InfectedHordes myHordes = new InfectedHordes();
  8.  
  9. */
  10.  
  11.  
  12.  
  13. /* Code by DaOne */
  14. class InfectedHordes
  15. {
  16.     ref map<string, vector> m_HordePositions = new map<string, vector>;
  17.  
  18.     //string m_NewHordeMsg      = "A New Horde of Zombies Showed up Around: ";
  19.     string m_NewHordeMsg        = "Een nieuwe Zombie horde gevonden Rond: ";
  20.     //string m_LastSeenMsg      = "The Horde of Zombies Was Last Seen Around: ";
  21.     string m_LastSeenMsg        = "De zombie horde was bij: ";
  22.  
  23.     int CURRENT_STAMP;
  24.     int CURRENT_STAMP_MSG;
  25.     int MESSAGE_INTERVAL     = 300000;   //in ms time between each message 300000
  26.     int COOL_DOWN_INTERVAL   = 1800000;  //In ms the time between each event
  27.     int UPDATE_INTERVAL      = 5000;    //In ms the time between each update ( don't change unless you know what you are doing :) )
  28.     int INT_MAX_ZOMBIES      = 125;     //Maximum amount of zombies
  29.     int INT_MIN_ZOMBIES      = 65;      //Minimum amount of zombies
  30.  
  31.     bool m_EventOnGoing     = false;
  32.  
  33.     ref array<EntityAI> m_SpawnedZombies = new array<EntityAI>;
  34.  
  35.     string m_CurrentZone;
  36.     vector m_CurrentZonePos;
  37.  
  38.     void InfectedHordes()
  39.     {
  40.         //All possible spawn points of hordes
  41.         m_HordePositions.Insert("Severograd",               "8428 0 12767"); //string Name of location, vector centre position
  42.         m_HordePositions.Insert("Stary",                    "6046 0 7733");
  43.         m_HordePositions.Insert("Vybor",                    "3784 0 8923");
  44.         m_HordePositions.Insert("NWAFS",                    "4540 0 9645");
  45.         m_HordePositions.Insert("NWAFC",                    "4823 0 10457");
  46.         m_HordePositions.Insert("NWAFN",                    "4214 0 10977");
  47.         m_HordePositions.Insert("Balota Air Strip",         "4467 0 2496");
  48.         m_HordePositions.Insert("Cherno City Centre",       "6649 0 2710");
  49.         m_HordePositions.Insert("Cherno West",              "6374 0 2361");
  50.         m_HordePositions.Insert("Cherno East",              "7331 0 2850");
  51.         m_HordePositions.Insert("Elektro West",             "10077 0 1988");
  52.         m_HordePositions.Insert("Elektro East",             "10553 0 2313");
  53.         m_HordePositions.Insert("Berezino City Centre",     "12319 0 9530");
  54.         m_HordePositions.Insert("Berezino South",           "11991 0 9116");
  55.         m_HordePositions.Insert("Berezino North",           "12823 0 10078");
  56.         m_HordePositions.Insert("Svetlojarsk",              "13900 0 13258");    
  57.         m_HordePositions.Insert("Zelenogorsk South",        "2572 0 5105");
  58.         m_HordePositions.Insert("Zelenogorsk North",        "2741 0 5416");
  59.         m_HordePositions.Insert("Novaya Petrovka",          "3395 0 13013");
  60.        
  61.         CURRENT_STAMP = GetGame().GetTime();
  62.         CURRENT_STAMP_MSG = GetGame().GetTime();
  63.         m_SpawnedZombies.Clear();
  64.         SelectZone();
  65.         SpawnHorde();
  66.         string message = m_NewHordeMsg + m_CurrentZone;
  67.         GlobalNotifier("inform",message);
  68.  
  69.         GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.onUpdate, UPDATE_INTERVAL, true);
  70.         Print("Infected Hordes...INIT!");
  71.     }
  72.  
  73.     vector SnapToGround(vector pos)
  74.     {
  75.         float pos_x = pos[0];
  76.         float pos_z = pos[2];
  77.         float pos_y = GetGame().SurfaceY( pos_x, pos_z );
  78.         vector tmp_pos = Vector( pos_x, pos_y, pos_z );
  79.         tmp_pos[1] = tmp_pos[1] + pos[1];
  80.  
  81.         return tmp_pos;
  82.     }
  83.    
  84.     void SpawnHorde()
  85.     {
  86.         m_EventOnGoing = true;
  87.  
  88.         int oRandValue   = Math.RandomIntInclusive(INT_MIN_ZOMBIES,INT_MAX_ZOMBIES);
  89.  
  90.         if (oRandValue != 0)
  91.         {
  92.             for (int i = 0; i < oRandValue; ++i)
  93.             {
  94.                 int rndX  = Math.RandomIntInclusive(10,35);
  95.                 int rndY  = Math.RandomIntInclusive(25,65);
  96.                 int oSkin = Math.RandomIntInclusive(0,5);
  97.                 int dropChance = Math.RandomIntInclusive(0,1);
  98.                        
  99.                 vector pos = SnapToGround(Vector(m_CurrentZonePos[0] + rndX, m_CurrentZonePos[1], m_CurrentZonePos[2] + rndY));
  100.                 string zmbClass = ZombieClasses.GetRandomElement();
  101.  
  102.                 EntityAI AIzmb = EntityAI.Cast(GetGame().CreateObject(zmbClass, pos, false, true));
  103.                 ref ZombieBase Bszmb;
  104.                 Class.CastTo(Bszmb, AIzmb);
  105.                 //Bszmb.AttachEventHandle(PossibleLootDrops,PossibleWeaponDrops,dropChance); // Disabled to stop an error
  106.  
  107.                 m_SpawnedZombies.Insert(AIzmb);
  108.  
  109.                 if (oSkin == 5)
  110.                 {
  111.                     AIzmb.SetObjectMaterial( 0, "DZ\\data\\laser.rvmat" );
  112.                     AIzmb.SetObjectMaterial( 1, "DZ\\data\\laser.rvmat" );
  113.                     AIzmb.SetObjectMaterial( 2, "DZ\\data\\laser.rvmat" );
  114.                 }
  115.             }
  116.         }
  117.     }
  118.  
  119.     void SelectZone()
  120.     {
  121.         int totalPossibleTowns  = m_HordePositions.Count();
  122.         int oRandValue = Math.RandomIntInclusive(0,totalPossibleTowns);
  123.  
  124.         string TownName = m_HordePositions.GetKey(oRandValue);
  125.         vector TownPosition = m_HordePositions.Get(TownName);
  126.         m_CurrentZone    = TownName;
  127.         m_CurrentZonePos = TownPosition;
  128.     }
  129.  
  130.     void GlobalNotifier(string task, string message)
  131.     {
  132.         switch(task)
  133.         {
  134.             case "inform":
  135.             GetGame().ChatPlayer(5,message);
  136.             break;
  137.         }
  138.     }
  139.  
  140.     void CleanUp()
  141.     {
  142.         for (int i = 0; i < m_SpawnedZombies.Count(); ++i)
  143.         {
  144.             EntityAI zmb = m_SpawnedZombies.Get(i);
  145.             GetGame().ObjectDelete(zmb);
  146.         }
  147.         m_SpawnedZombies.Clear();
  148.     }
  149.  
  150.     void onUpdate()
  151.     {
  152.         int newStamp = GetGame().GetTime();
  153.         string message;
  154.  
  155.         if (newStamp - CURRENT_STAMP >= COOL_DOWN_INTERVAL)
  156.         {
  157.             //Select new area
  158.             if (m_EventOnGoing)
  159.             {
  160.                 CleanUp();
  161.                 SelectZone();
  162.                 SpawnHorde();
  163.                 message = m_NewHordeMsg + m_CurrentZone;
  164.                 GlobalNotifier("inform",message);
  165.             }
  166.             CURRENT_STAMP = GetGame().GetTime();
  167.         }
  168.  
  169.         if (newStamp - CURRENT_STAMP_MSG >= MESSAGE_INTERVAL)
  170.         {
  171.             //Do Message
  172.             if (m_EventOnGoing)
  173.             {
  174.                 message = m_LastSeenMsg + m_CurrentZone;
  175.                 GlobalNotifier("inform",message);
  176.             }
  177.             CURRENT_STAMP_MSG = GetGame().GetTime();
  178.         }
  179.     }
  180.  
  181.     ref TStringArray PossibleLootDrops = {
  182.         "ammo_45acp", "ammo_308win", "ammo_9x19", "ammo_380", "ammo_556x45", "ammo_762x54", "ammo_762x54tracer", "ammo_762x39", "ammo_9x39", "ammo_22", "ammo_12gapellets",
  183.         "mag_cmag_10rnd", "mag_cmag_10rnd_black", "mag_cmag_10rnd_green", "mag_cmag_20rnd", "mag_cmag_20rnd_black", "mag_cmag_20rnd_green",
  184.         "mag_cmag_30rnd", "mag_cmag_30rnd_black", "mag_cmag_30rnd_green", "mag_cmag_40rnd", "mag_cmag_40rnd_black", "mag_cmag_40rnd_green",
  185.     };
  186.  
  187.     ref TStringArray PossibleWeaponDrops = {
  188.         "AKM", "M4A1", "izh18", "mp5k", "ump45", "svd", "mosin9130","mosin9130_black",
  189.         "mosin9130_green","mosin9130_camo",
  190.     };
  191.  
  192.  
  193.     ref TStringArray ZombieClasses = {
  194.     "ZmbM_HermitSkinny_Beige","ZmbM_HermitSkinny_Black","ZmbM_HermitSkinny_Green","ZmbM_HermitSkinny_Red","ZmbM_FarmerFat_Beige","ZmbM_FarmerFat_Blue","ZmbM_FarmerFat_Brown",
  195.     "ZmbM_FarmerFat_Green","ZmbF_CitizenANormal_Beige","ZmbF_CitizenANormal_Brown",
  196.     "ZmbF_CitizenANormal_Blue","ZmbM_CitizenASkinny_Blue","ZmbM_CitizenASkinny_Brown",
  197.     "ZmbM_CitizenASkinny_Grey","ZmbM_CitizenASkinny_Red","ZmbM_CitizenBFat_Blue","ZmbM_CitizenBFat_Red",
  198.     "ZmbM_CitizenBFat_Green","ZmbF_CitizenBSkinny","ZmbM_PrisonerSkinny",
  199.     "ZmbM_FirefighterNormal","ZmbM_FishermanOld_Blue","ZmbM_FishermanOld_Green",
  200.     "ZmbM_FishermanOld_Grey","ZmbM_FishermanOld_Red","ZmbM_JournalistSkinny",
  201.     "ZmbF_JournalistNormal_Blue","ZmbF_JournalistNormal_Green","ZmbF_JournalistNormal_Red","ZmbF_JournalistNormal_White",
  202.     "ZmbM_ParamedicNormal_Blue","ZmbM_ParamedicNormal_Green","ZmbM_ParamedicNormal_Red",
  203.     "ZmbM_ParamedicNormal_Black","ZmbF_ParamedicNormal_Blue","ZmbF_ParamedicNormal_Green",
  204.     "ZmbF_ParamedicNormal_Red","ZmbM_HikerSkinny_Blue","ZmbM_HikerSkinny_Green","ZmbM_HikerSkinny_Yellow",
  205.     "ZmbF_HikerSkinny_Blue","ZmbF_HikerSkinny_Grey","ZmbF_HikerSkinny_Green","ZmbF_HikerSkinny_Red",
  206.     "ZmbM_HunterOld_Autumn","ZmbM_HunterOld_Spring","ZmbM_HunterOld_Summer","ZmbM_HunterOld_Winter",
  207.     "ZmbF_SurvivorNormal_Blue","ZmbF_SurvivorNormal_Orange","ZmbF_SurvivorNormal_Red",
  208.     "ZmbF_SurvivorNormal_White","ZmbM_SurvivorDean_Black","ZmbM_SurvivorDean_Blue","ZmbM_SurvivorDean_Grey",
  209.     "ZmbM_PolicemanFat","ZmbF_PoliceWomanNormal",
  210.     "ZmbM_PolicemanSpecForce","ZmbM_SoldierNormal",
  211.     "ZmbM_usSoldier_normal_Woodland","ZmbM_usSoldier_normal_Desert","ZmbM_CommercialPilotOld_Blue",
  212.     "ZmbM_CommercialPilotOld_Olive","ZmbM_CommercialPilotOld_Brown","ZmbM_CommercialPilotOld_Grey",
  213.     "ZmbM_PatrolNormal_PautRev","ZmbM_PatrolNormal_Autumn","ZmbM_PatrolNormal_Flat","ZmbM_PatrolNormal_Summer",
  214.     "ZmbM_JoggerSkinny_Blue","ZmbM_JoggerSkinny_Green","ZmbM_JoggerSkinny_Red","ZmbF_JoggerSkinny_Blue",
  215.     "ZmbF_JoggerSkinny_Brown","ZmbF_JoggerSkinny_Green","ZmbF_JoggerSkinny_Red","ZmbM_MotobikerFat_Beige",
  216.     "ZmbM_MotobikerFat_Black","ZmbM_MotobikerFat_Blue","ZmbM_VillagerOld_Blue","ZmbM_VillagerOld_Green",
  217.     "ZmbM_VillagerOld_White","ZmbM_SkaterYoung_Blue","ZmbM_SkaterYoung_Brown","ZmbM_SkaterYoung_Green",
  218.     "ZmbM_SkaterYoung_Grey","ZmbF_SkaterYoung_Brown","ZmbF_SkaterYoung_Striped","ZmbF_SkaterYoung_Violet",
  219.     "ZmbF_DoctorSkinny","ZmbF_BlueCollarFat_Blue","ZmbF_BlueCollarFat_Green",
  220.     "ZmbF_BlueCollarFat_Red","ZmbF_BlueCollarFat_White","ZmbF_MechanicNormal_Beige","ZmbF_MechanicNormal_Green",
  221.     "ZmbF_MechanicNormal_Grey","ZmbF_MechanicNormal_Orange","ZmbM_MechanicSkinny_Blue","ZmbM_MechanicSkinny_Grey",
  222.     "ZmbM_MechanicSkinny_Green","ZmbM_MechanicSkinny_Red","ZmbM_ConstrWorkerNormal_Beige",
  223.     "ZmbM_ConstrWorkerNormal_Black","ZmbM_ConstrWorkerNormal_Green","ZmbM_ConstrWorkerNormal_Grey",
  224.     "ZmbM_HeavyIndustryWorker","ZmbM_OffshoreWorker_Green","ZmbM_OffshoreWorker_Orange","ZmbM_OffshoreWorker_Red",
  225.     "ZmbM_OffshoreWorker_Yellow","ZmbF_NurseFat","ZmbM_HandymanNormal_Beige",
  226.     "ZmbM_HandymanNormal_Blue","ZmbM_HandymanNormal_Green","ZmbM_HandymanNormal_Grey","ZmbM_HandymanNormal_White",
  227.     "ZmbM_DoctorFat","ZmbM_Jacket_beige","ZmbM_Jacket_black","ZmbM_Jacket_blue","ZmbM_Jacket_bluechecks",
  228.     "ZmbM_Jacket_brown","ZmbM_Jacket_greenchecks","ZmbM_Jacket_grey","ZmbM_Jacket_khaki","ZmbM_Jacket_magenta","ZmbM_Jacket_stripes",
  229.     "ZmbF_PatientOld","ZmbM_PatientSkinny","ZmbF_ShortSkirt_beige",
  230.     "ZmbF_ShortSkirt_black","ZmbF_ShortSkirt_brown","ZmbF_ShortSkirt_green","ZmbF_ShortSkirt_grey","ZmbF_ShortSkirt_checks",
  231.     "ZmbF_ShortSkirt_red","ZmbF_ShortSkirt_stripes","ZmbF_ShortSkirt_white","ZmbF_ShortSkirt_yellow",
  232.     "ZmbF_VillagerOld_Blue","ZmbF_VillagerOld_Green","ZmbF_VillagerOld_Red","ZmbF_VillagerOld_White","ZmbM_Soldier","ZmbM_SoldierAlice",
  233.     "ZmbM_SoldierHelmet","ZmbM_SoldierVest","ZmbM_SoldierAliceHelmet","ZmbM_SoldierVestHelmet",
  234.     "ZmbF_MilkMaidOld_Beige","ZmbF_MilkMaidOld_Black","ZmbF_MilkMaidOld_Green","ZmbF_MilkMaidOld_Grey",
  235.     "ZmbM_priestPopSkinny","ZmbM_ClerkFat_Brown","ZmbM_ClerkFat_Grey","ZmbM_ClerkFat_Khaki","ZmbM_ClerkFat_White","ZmbF_Clerk_Normal_Blue","ZmbF_Clerk_Normal_White","ZmbF_Clerk_Normal_Green","ZmbF_Clerk_Normal_Red",
  236.     };
  237. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement