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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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);
        }