DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ContaminatedAreaLoader.c
См. документацию.
1// This will be used to parse and load contaminated area related data
3{
4 private static string m_Path = "$mission:cfgeffectarea.json";
5
6 static void CreateZones()
7 {
8 JsonDataContaminatedAreas effectAreaData;
9
10 // We confirm the contaminated area configuration file exists in mission folder
11 if (!FileExist(m_Path))
12 {
13 // We fallback to check in data and notify user file was not found in mission
14 PrintToRPT("[WARNING] :: [EffectAreaLoader CreateZones] :: No contaminated area file found in MISSION folder, your path is " + m_Path + " Attempting DATA folder"); // If the path is invalid, we warn the user
15
16 m_Path = "";
18 m_Path = string.Format("dz/worlds/%1/ce/cfgeffectarea.json", m_Path);
19
20 if (!FileExist(m_Path))
21 {
22 PrintToRPT("[WARNING] :: [EffectAreaLoader CreateZones] :: No contaminated area file found in DATA folder, your path is " + m_Path); // If the path is invalid, we warn the user
23 return; // Nothing could be read, just end here
24 }
25 }
26
27 // We load the data from file, in case of failure we notify user
28 effectAreaData = EffectAreaLoader.GetData();
29 if (effectAreaData)
30 {
31 // Now that we have extracted the data we go through every declared area
32 //Debug.Log("Contaminated area JSON contains : " + effectAreaData.Areas.Count());
33
34 for (int i = 0; i < effectAreaData.Areas.Count(); ++i)
35 {
36 EffectAreaParams params = new EffectAreaParams();
37
38 // We feed in all relevant data
39 params.m_ParamName = effectAreaData.Areas.Get( i ).AreaName;
40 string areaType = effectAreaData.Areas.Get( i ).Type;
41 params.m_ParamTriggerType = effectAreaData.Areas.Get( i ).TriggerType;
42 JsonDataAreaData data = effectAreaData.Areas.Get( i ).Data;
43
44 // World level area data ( Trigger info, world particles, etc... )
45 vector pos = Vector( data.Pos[0], data.Pos[1], data.Pos[2] );
46 if (data.Radius <= 0)
47 {
48 ErrorEx(string.Format("Radius cannot be <= 0. Fix [%1] area definition in cfgeffectarea.json", params.m_ParamName));
49 continue;
50 }
51
52 params.m_ParamRadius = data.Radius;
53
54 params.m_ParamPosHeight = data.PosHeight;
55 params.m_ParamNegHeight = data.NegHeight;
56
57 params.m_ParamInnerRings = data.InnerRingCount;
58 params.m_ParamInnerSpace = data.InnerPartDist;
59 params.m_ParamOuterToggle = data.OuterRingToggle;
60 params.m_ParamOuterSpace = data.OuterPartDist;
61 params.m_ParamOuterOffset = data.OuterOffset;
62 params.m_ParamVertLayers = data.VerticalLayers;
63 params.m_ParamVerticalOffset = data.VerticalOffset;
64 string particleName = data.ParticleName;
65 params.m_ParamEffectInterval = data.EffectInterval;
66 params.m_ParamEffectDuration = data.EffectDuration;
67 params.m_ParamEffectModifier = data.EffectModifier;
68
69 // Local level area data ( Player particles and PPE )
70 JsonDataPlayerData playerData = effectAreaData.Areas.Get( i ).PlayerData;
71 string aroundPartName = playerData.AroundPartName;
72 string tinyPartName = playerData.TinyPartName;
73 string ppeRequesterType = playerData.PPERequesterType;
74
75 // Conversion of particle name to ID for synchronization and loading
76 if (particleName != "")
77 params.m_ParamPartId = ParticleList.GetParticleID( particleName );
78
79 if (aroundPartName != "")
80 params.m_ParamAroundPartId = ParticleList.GetParticleID(aroundPartName);
81
82 if (tinyPartName != "")
83 params.m_ParamTinyPartId = ParticleList.GetParticleID(tinyPartName);
84
85 params.m_ParamPpeRequesterType = ppeRequesterType;
86
87 EffectArea newZone; // Zones MUST inherit from EffectArea
88
89 // We snap item position to ground before creating if specified Y is 0
90 if (pos[1] == 0)
91 {
92 pos[1] = GetGame().SurfaceRoadY(pos[0], pos[2]);
93 newZone = EffectArea.Cast(GetGame().CreateObjectEx(areaType, pos, ECE_PLACE_ON_SURFACE));
94 }
95 else
96 newZone = EffectArea.Cast(GetGame().CreateObjectEx(areaType, pos, ECE_NONE));
97
98 // We created a new zone, we feed in the data to finalize setup
99 if (newZone)
100 newZone.SetupZoneData(params);
101 else
102 Error("[WARNING] :: [EffectAreaLoader CreateZones] :: Cast failed, are you sure your class ( 'Type:' ) inherits from EffectArea and that there are no Typos?");
103 }
104 }
105 else
106 Error("[WARNING] :: [EffectAreaLoader CreateZones] :: Data could not be read, please check data and syntax"); // Most JSON related errors should be handled, but we have an extra check in case data could not be read
107 }
108
110 {
111 string errorMessage;
113 if (!JsonFileLoader<JsonDataContaminatedAreas>.LoadFile(m_Path, data, errorMessage))
114 ErrorEx(errorMessage);
115
116 return data;
117 }
118}
const int ECE_NONE
Определения CentralEconomy.c:7
const int ECE_PLACE_ON_SURFACE
Определения CentralEconomy.c:37
proto void GetWorldName(out string world_name)
proto native float SurfaceRoadY(float x, float z, RoadSurfaceDetection rsd=RoadSurfaceDetection.LEGACY)
static JsonDataContaminatedAreas GetData()
Определения ContaminatedAreaLoader.c:109
static void CreateZones()
Определения ContaminatedAreaLoader.c:6
static string m_Path
Определения ContaminatedAreaLoader.c:4
float PosHeight
Определения JsonDataContaminatedArea.c:21
int EffectDuration
Определения JsonDataContaminatedArea.c:32
int InnerPartDist
Определения JsonDataContaminatedArea.c:24
bool EffectModifier
Определения JsonDataContaminatedArea.c:33
int VerticalLayers
Определения JsonDataContaminatedArea.c:28
string ParticleName
Определения JsonDataContaminatedArea.c:30
int VerticalOffset
Определения JsonDataContaminatedArea.c:29
int EffectInterval
Определения JsonDataContaminatedArea.c:31
int InnerRingCount
Определения JsonDataContaminatedArea.c:23
ref array< float > Pos
Определения JsonDataContaminatedArea.c:19
int OuterPartDist
Определения JsonDataContaminatedArea.c:26
float NegHeight
Определения JsonDataContaminatedArea.c:22
bool OuterRingToggle
Определения JsonDataContaminatedArea.c:25
ref array< ref JsonDataContaminatedArea > Areas
Определения JsonDataContaminatedArea.c:4
string PPERequesterType
Определения JsonDataContaminatedArea.c:40
string AroundPartName
Определения JsonDataContaminatedArea.c:38
string TinyPartName
Определения JsonDataContaminatedArea.c:39
static int GetParticleID(string particle_file)
Returns particle's ID based on the path (without .ptc suffix)
Определения ParticleList.c:495
Определения ParticleList.c:12
Определения EnConvert.c:106
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
proto void PrintToRPT(void var)
Prints content of variable to RPT file (performance warning - each write means fflush!...
enum ShapeType ErrorEx
proto bool FileExist(string name)
Check existence of file.
proto native vector Vector(float x, float y, float z)
Vector constructor from components.