Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_VotingGroupLeader.c
Go to the documentation of this file.
3{
5
6 //------------------------------------------------------------------------------------------------
7 override bool IsAvailable(int value, bool isOngoing)
8 {
9 if (!m_Group)
10 return false;
11
12 if (value == m_Group.GetLeaderID())
13 return false;
14
15 PlayerManager playerManager = GetGame().GetPlayerManager();
16 if (!PlayerManager)
17 return false;
18
19 if (isOngoing && !playerManager.IsPlayerConnected(value))
20 return false;
21
22 SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
23 if (!groupsManager)
24 return false;
25
26 SCR_AIGroup localPlayerGroup = groupsManager.GetPlayerGroup(SCR_PlayerController.GetLocalPlayerId());
27 if (!localPlayerGroup || localPlayerGroup != m_Group)
28 return false;
29
30 return true;
31 }
32
33 //------------------------------------------------------------------------------------------------
34 override int GetPlayerCount()
35 {
36 SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
37 if (!groupsManager)
38 return 1;
39
40 SCR_AIGroup playerGroup = groupsManager.GetPlayerGroup(m_iValue);
41 if (!playerGroup)
42 return 1;
43
44 return Math.Max(playerGroup.GetPlayerCount(), 1);
45 }
46
47 //------------------------------------------------------------------------------------------------
48 override bool CanSendNotification(int value)
49 {
50 SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
51 if (!groupsManager)
52 return false;
53
54 SCR_AIGroup playerGroup = groupsManager.GetPlayerGroup(value);
55 if (!playerGroup)
56 return false;
57
58 int localPlayerId = SCR_PlayerController.GetLocalPlayerId();
59 SCR_AIGroup localPlayerGroup = groupsManager.GetPlayerGroup(localPlayerId);
60 if (!localPlayerGroup)
61 return false;
62
63 return (localPlayerGroup == playerGroup);
64 }
65
66 //------------------------------------------------------------------------------------------------
67 override void OnVotingEnd(int value = DEFAULT_VALUE, int winner = DEFAULT_VALUE)
68 {
69 if (m_Group)
70 {
71 m_Group.GetOnPlayerRemoved().Remove(OnPlayerRemoved);
72 m_Group.GetOnPlayerLeaderChanged().Remove(OnLeaderChanged);
73 }
74
75 if (winner == DEFAULT_VALUE)
76 return;
77
78 if (Replication.IsClient())
79 return;
80
81 SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
82 if (!groupsManager)
83 return;
84
85 SCR_AIGroup playerGroup = groupsManager.GetPlayerGroup(winner);
86 if (!playerGroup)
87 return;
88
89 playerGroup.SetGroupLeader(winner);
90 }
91
92 //------------------------------------------------------------------------------------------------
93 override void InitFromTemplate(SCR_VotingBase template, int startingPlayerID, int value, float remainingDuration)
94 {
95 SCR_GroupsManagerComponent groupsManager = SCR_GroupsManagerComponent.GetInstance();
96 if (groupsManager)
97 m_Group = groupsManager.GetPlayerGroup(value);
98
99 if (m_Group)
100 {
101 m_Group.GetOnPlayerRemoved().Insert(OnPlayerRemoved);
102 m_Group.GetOnPlayerLeaderChanged().Insert(OnLeaderChanged);
103 }
104
105 super.InitFromTemplate(template, startingPlayerID, value, remainingDuration);
106 }
107
108 //------------------------------------------------------------------------------------------------
112 void OnPlayerRemoved(SCR_AIGroup aiGroup, int playerId)
113 {
114 if (aiGroup != m_Group || playerId != m_iValue)
115 return;
116
117 SCR_VotingManagerComponent votingManager = SCR_VotingManagerComponent.GetInstance();
118 if (!votingManager)
119 return;
120
121 votingManager.EndVoting(m_Type, m_iValue, EVotingOutcome.FORCE_FAIL);
122 }
123
124 //------------------------------------------------------------------------------------------------
128 void OnLeaderChanged(int groupId, int playerId)
129 {
130 if (groupId != m_Group.GetGroupID() || playerId != m_iValue)
131 return;
132
133 SCR_VotingManagerComponent votingManager = SCR_VotingManagerComponent.GetInstance();
134 if (!votingManager)
135 return;
136
137 votingManager.EndVoting(m_Type, m_iValue, EVotingOutcome.FORCE_FAIL);
138 }
139}
EVotingOutcome
EVotingType
Definition EVotingType.c:2
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
class SCR_CampaignHintStorage SCR_BaseContainerCustomTitleEnum(EHint, "m_eHintId")
void SCR_GroupsManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_VotingManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
Definition Math.c:13
Main replication API.
Definition Replication.c:14
int GetPlayerCount(bool checkMasterAndSlaves=false)
void SetGroupLeader(int playerID)
Called on the server (authority).
static int GetLocalPlayerId()
Returns either a valid ID of local player or 0.
EVotingType m_Type
static const int DEFAULT_VALUE
override bool CanSendNotification(int value)
override bool IsAvailable(int value, bool isOngoing)
void OnPlayerRemoved(SCR_AIGroup aiGroup, int playerId)
void OnLeaderChanged(int groupId, int playerId)
override void InitFromTemplate(SCR_VotingBase template, int startingPlayerID, int value, float remainingDuration)
override void OnVotingEnd(int value=DEFAULT_VALUE, int winner=DEFAULT_VALUE)