View difference between Paste ID: aHnGN11Q and GkEiRMij
SHOW: | | - or go back to the newest paste.
1
/*
2
3
Add this to the top of init.c:
4
#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\InfectedHordes.c"
5
6-
    string m_NewHordeMsg       = "A New Horde of Zombies Showed up Around: ";
6+
Add this inside override void OnInit() in init.c
7-
    string m_LastSeenMsg      = "The Horde of Zombies Was Last Seen Around: ";
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-
        m_HordePositions.Insert( "Severograd", "8428 0 12767" ); //string Name of location, vector centre position
27+
28-
        m_HordePositions.Insert( "Stary", "6046 0 7733" );
28+
29-
        m_HordePositions.Insert( "Vybor", "3784 0 8923" );
29+
30-
        m_HordePositions.Insert( "NWAFS", "4540 0 9645" );
30+
31-
        m_HordePositions.Insert( "NWAFC", "4823 0 10457" );
31+
32-
        m_HordePositions.Insert( "NWAFN", "4214 0 10977" );
32+
33-
        m_HordePositions.Insert( "Balota Air Strip", "4467 0 2496" );
33+
34-
        m_HordePositions.Insert( "Cherno City Centre", "6649 0 2710" );
34+
35-
        m_HordePositions.Insert( "Cherno West", "6374 0 2361" );
35+
36-
        m_HordePositions.Insert( "Cherno East", "7331 0 2850" );
36+
37-
        m_HordePositions.Insert( "Elektro West", "10077 0 1988" );
37+
38-
        m_HordePositions.Insert( "Elektro East", "10553 0 2313" );
38+
39-
        m_HordePositions.Insert( "Berezino City Centre", "12319 0 9530" );
39+
40-
        m_HordePositions.Insert( "Berezino South", "11991 0 9116" );
40+
41-
        m_HordePositions.Insert( "Berezino North", "12823 0 10078" );
41+
        m_HordePositions.Insert("Severograd",				"8428 0 12767"); //string Name of location, vector centre position
42-
        m_HordePositions.Insert( "Svetlojarsk", "13900 0 13258" );    
42+
        m_HordePositions.Insert("Stary",					"6046 0 7733");
43-
        m_HordePositions.Insert( "Zelenogorsk South", "2572 0 5105" );
43+
        m_HordePositions.Insert("Vybor",					"3784 0 8923");
44-
        m_HordePositions.Insert( "Zelenogorsk North", "2741 0 5416" );
44+
        m_HordePositions.Insert("NWAFS",					"4540 0 9645");
45-
        m_HordePositions.Insert( "Novaya Petrovka", "3395 0 13013" );
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
};