DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
TriggerEffectManager.c
Go to the documentation of this file.
1/*
2DISCLAIMER: may undergo some changes in the course of 1.14 experimental stage.
3*/
4
5// Used for Effect based triggers ( such as Contaminated areas )
6// Allows us to unify these triggers and treat Enter / Exit events as if all triggers were one
8{
10
11 // Player map will only be handled client side as it is most relevant
12 ref map<string, ref map<PlayerBase, int>> m_PlayerInsiderMap; // Used to keep track of which players are in which effects
13
15 {
17 }
18
19 static void DestroyInstance()
20 {
21 m_This = null;
22 }
23
24 // This is a SINGLETON so, if we can't get the instance, we create it
26 {
27 if ( !m_This )
29
30 return m_This;
31 }
32
33 void RegisterTriggerType( EffectTrigger effectTrigger )
34 {
35 if ( !m_PlayerInsiderMap.Contains( effectTrigger.GetType() ) )
36 {
38 m_PlayerInsiderMap.Insert( effectTrigger.GetType(), playerMap );
39
40 //Debug.Log( "We have : " + m_PlayerInsiderMap.Count() + " triggers");
41 }
42 }
43
44 // When a player enters a trigger using this class, we add player to map or increase its trigger count
45 void OnPlayerEnter( notnull PlayerBase player, notnull EffectTrigger trigger )
46 {
47 string trigger_type = trigger.GetType();
48
49 map<PlayerBase, int> playerMap;
50 if ( m_PlayerInsiderMap.Find( trigger_type, playerMap) )
51 {
52 if ( playerMap )
53 {
54 if ( playerMap.Contains( player ) )
55 {
56 int newTriggerCount = playerMap.Get( player ) + 1;
57 playerMap.Set( player, newTriggerCount );
58 //Debug.Log("We increase the amount of triggers a player is in");
59 }
60 else
61 {
62 // First time this player enters this type of trigger, we set the trigger count to 1
63 playerMap.Insert( player, 1 );
64 //Debug.Log("We insert a player");
65 }
66
67 //m_PlayerInsiderMap.Set( trigger_type, playerMap );
68 }
69 else
70 {
71 // We didn't have the map yet, we create it and register this player in it
72 playerMap = new map<PlayerBase, int>;
73 playerMap.Insert( player, 1 );
74 m_PlayerInsiderMap.Insert( trigger_type, playerMap );
75 }
76 }
77 }
78
79 // Same as OnPlayerEnter, but we decrease trigger count on each trigger leave and remove player from map when count is 0
80 void OnPlayerExit( notnull PlayerBase player, notnull EffectTrigger trigger )
81 {
82 string trigger_type = trigger.GetType();
83
84 map<PlayerBase, int> playerMap;
85 if ( m_PlayerInsiderMap.Find( trigger_type, playerMap ) && playerMap )
86 {
87 if ( playerMap.Contains( player ))
88 {
89 if( playerMap.Get( player ) > 1 )
90 {
91 //Debug.Log("We reduced the amount of triggers the player is in");
92 playerMap.Set( player, playerMap.Get( player ) - 1 );
93 }
94 else
95 {
96 // The player left the last trigger of this type they were in
97 playerMap.Remove( player );
98 //Debug.Log("We removed this player from this trigger type");
99 }
100 }
101 //m_PlayerInsiderMap.Set( trigger_type, playerMap );
102
103 }
104 }
105
106 bool IsPlayerInTriggerType( notnull PlayerBase player, notnull EffectTrigger trigger )
107 {
108 map<PlayerBase, int> playerMap;
109 if ( m_PlayerInsiderMap.Find( trigger.GetType(), playerMap ) )
110 {
111 return playerMap != null && playerMap.Contains( player );
112 }
113 return false;
114 }
115}
static ref TriggerEffectManager m_This
void OnPlayerExit(notnull PlayerBase player, notnull EffectTrigger trigger)
bool IsPlayerInTriggerType(notnull PlayerBase player, notnull EffectTrigger trigger)
void OnPlayerEnter(notnull PlayerBase player, notnull EffectTrigger trigger)
ref map< string, ref map< PlayerBase, int > > m_PlayerInsiderMap
void RegisterTriggerType(EffectTrigger effectTrigger)
static TriggerEffectManager GetInstance()