bool CheckFactionStateChange(MyFactionStateChange action, long fromFactionId, long toFactionId, long playerId, long senderId) { Debug.Assert(Sync.IsServer, "Only server can check state of message!"); if (!Sync.IsServer) { return(false); } if (!m_factions.ContainsKey(fromFactionId) || !m_factions.ContainsKey(toFactionId)) { return(false); } var key = new MyFactionPair(fromFactionId, toFactionId); HashSet <long> tmpSet; MyRelationsBetweenFactions tmp; switch (action) { case MyFactionStateChange.RemoveFaction: return(true); case MyFactionStateChange.SendPeaceRequest: return((m_factionRequests.TryGetValue(fromFactionId, out tmpSet)) ? !tmpSet.Contains(toFactionId) : true); case MyFactionStateChange.CancelPeaceRequest: return((m_factionRequests.TryGetValue(fromFactionId, out tmpSet)) ? tmpSet.Contains(toFactionId) : false); case MyFactionStateChange.AcceptPeace: return((m_relationsBetweenFactions.TryGetValue(key, out tmp)) ? tmp != MyRelationsBetweenFactions.Neutral : true); case MyFactionStateChange.DeclareWar: return((m_relationsBetweenFactions.TryGetValue(key, out tmp)) ? tmp != MyRelationsBetweenFactions.Enemies : false); case MyFactionStateChange.FactionMemberSendJoin: return(!m_factions[fromFactionId].IsMember(playerId) && !m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberCancelJoin: return(!m_factions[fromFactionId].IsMember(playerId) && m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberAcceptJoin: return(m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberKick: if (m_factions[fromFactionId].IsMember(playerId)) { if (MySession.Static.Settings.ScenarioEditMode && Sync.Players.IdentityIsNpc(playerId)) { MyIdentity id = Sync.Players.TryGetIdentity(playerId); id.TransferAllBlocksTo(senderId); } return(true); } return(false); case MyFactionStateChange.FactionMemberPromote: return(m_factions[fromFactionId].IsMember(playerId)); case MyFactionStateChange.FactionMemberDemote: return(m_factions[fromFactionId].IsLeader(playerId)); case MyFactionStateChange.FactionMemberLeave: return(m_factions[fromFactionId].IsMember(playerId)); } return(false); }
/// <summary> /// Use this for quick check of relation between two factions. /// </summary> /// <param name="factionId1">First faction id</param> /// <param name="factionId2">Second faction id</param> /// <returns>Enum that describes the relation between given factions</returns> public MyRelationsBetweenFactions GetRelationBetweenFactions(long factionId1, long factionId2) { if (factionId1 == factionId2 && factionId1 != 0) { return(MyRelationsBetweenFactions.Neutral); } var key = new MyFactionPair(factionId1, factionId2); if (m_relationsBetweenFactions.ContainsKey(key)) { return(m_relationsBetweenFactions[key]); } return(MyRelationsBetweenFactions.Enemies); }
/// <summary> /// Use this for quick check of relation between two factions. /// </summary> /// <param name="factionId1">First faction id</param> /// <param name="factionId2">Second faction id</param> /// <returns>Enum that describes the relation between given factions</returns> public MyRelationsBetweenFactions GetRelationBetweenFactions(long factionId1, long factionId2) { if (factionId1 == factionId2 && factionId1 != 0) { return(MyRelationsBetweenFactions.Neutral); } var key = new MyFactionPair(factionId1, factionId2); if (m_relationsBetweenFactions.ContainsKey(key)) { return(m_relationsBetweenFactions[key]); } return(MyPerGameSettings.DefaultFactionRelationship); }
bool CheckFactionStateChange(MyFactionStateChange action, long fromFactionId, long toFactionId, long playerId, long senderId) { Debug.Assert(Sync.IsServer, "Only server can check state of message!"); if (!Sync.IsServer) { return(false); } if (!m_factions.ContainsKey(fromFactionId) || !m_factions.ContainsKey(toFactionId)) { return(false); } var key = new MyFactionPair(fromFactionId, toFactionId); HashSet <long> tmpSet; switch (action) { case MyFactionStateChange.RemoveFaction: return(true); case MyFactionStateChange.SendPeaceRequest: return((m_factionRequests.TryGetValue(fromFactionId, out tmpSet)) ? !tmpSet.Contains(toFactionId) : true); case MyFactionStateChange.CancelPeaceRequest: return((m_factionRequests.TryGetValue(fromFactionId, out tmpSet)) ? tmpSet.Contains(toFactionId) : false); case MyFactionStateChange.AcceptPeace: return(GetRelationBetweenFactions(fromFactionId, toFactionId) != MyRelationsBetweenFactions.Neutral); case MyFactionStateChange.DeclareWar: return(GetRelationBetweenFactions(fromFactionId, toFactionId) != MyRelationsBetweenFactions.Enemies); case MyFactionStateChange.FactionMemberSendJoin: return(!m_factions[fromFactionId].IsMember(playerId) && !m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberCancelJoin: return(!m_factions[fromFactionId].IsMember(playerId) && m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberAcceptJoin: return(m_factions[fromFactionId].JoinRequests.ContainsKey(playerId)); case MyFactionStateChange.FactionMemberKick: return(m_factions[fromFactionId].IsMember(playerId)); case MyFactionStateChange.FactionMemberPromote: return(m_factions[fromFactionId].IsMember(playerId)); case MyFactionStateChange.FactionMemberDemote: return(m_factions[fromFactionId].IsLeader(playerId)); case MyFactionStateChange.FactionMemberLeave: return(m_factions[fromFactionId].IsMember(playerId)); } return(false); }