void SetEXValueByForce(int forceID, int targetPlayerID, int value)
    {
        ReputationData data = GetReputationData(forceID);
        ReputationCamp camp = data.GetReputationCamp(targetPlayerID);

        camp.exValue = Mathf.Clamp(value, 0, ReputationLevelValue[ReputationLevelValue.Length - 1]);
        camp.ResetState();
    }
 ReputationData GetReputationData(int forceID)
 {
     if (!m_ReputationDatas.ContainsKey(forceID))
     {
         m_ReputationDatas[forceID] = new ReputationData();
     }
     return(m_ReputationDatas[forceID]);
 }
    public void Active(int forceID)
    {
        if (!m_ForceIDList.Contains(forceID))
        {
            return;
        }
        ReputationData data = GetReputationData(forceID);

        data.active = true;
    }
 public void Export(BinaryWriter w)
 {
     w.Write((int)CURRENT_VERSION);
     w.Write(m_ReputationDatas.Count);
     foreach (int forceID in m_ReputationDatas.Keys)
     {
         w.Write(forceID);
         ReputationData data = GetReputationData(forceID);
         data.Export(w);
     }
 }
    void SetReputationValueByForce(int forceID, int targetPlayerID, int value)
    {
        ReputationData data = GetReputationData(forceID);
        ReputationCamp camp = data.GetReputationCamp(targetPlayerID);

        camp.reputationValue = Mathf.Clamp(value, 0, ReputationLevelValue[ReputationLevelValue.Length - 1]);
        camp.ResetState();
        if (null != onReputationChange)
        {
            onReputationChange(forceID, targetPlayerID);
        }
    }
    public int GetExValue(int playerID, int targetPlayerID)
    {
        int forceID = ForceSetting.Instance.GetForceID(playerID);

        if (!m_ForceIDList.Contains(forceID))
        {
            return(DefaultReputationValue);
        }
        ReputationData data = GetReputationData(forceID);

        return(data.GetReputationCamp(targetPlayerID).exValue);
    }
    bool TryChangeBelligerencyStateByForce(int forceID, int targetPlayerID, bool state)
    {
        ReputationData data = GetReputationData(forceID);

        if (data.GetReputationCamp(targetPlayerID).belligerency == state)
        {
            return(false);
        }
        if (!state)
        {
            return(false);
        }
        SetReputationValueByForce(forceID, targetPlayerID, DefaultbelligerencyValue);
        return(true);
    }
    public void ActiveReputation(int playerID)
    {
        int forceID = ForceSetting.Instance.GetForceID(playerID);

        if (!m_ForceIDList.Contains(forceID))
        {
            return;
        }
        if (PeGameMgr.IsMulti)
        {
            NetworkManager.SyncServer(EPacketType.PT_Reputation_SetActive, forceID);
        }
        else
        {
            ReputationData data = GetReputationData(forceID);
            data.active = true;
        }
    }
    public void Import(byte[] data)
    {
        m_ReputationDatas.Clear();
        MemoryStream ms  = new MemoryStream(data);
        BinaryReader _in = new BinaryReader(ms);

        int readVersion = _in.ReadInt32();
        int count       = _in.ReadInt32();

        for (int i = 0; i < count; i++)
        {
            int forceID = _in.ReadInt32();
            AddForceID(forceID);
            ReputationData rData = GetReputationData(forceID);
            rData.Import(_in, readVersion);
        }
        _in.Close();
        ms.Close();
    }
    /// <summary>
    /// Modifies the reputation value.
    /// </summary>
    void ChangeReputationValueByForce(int forceID, int targetPlayerID, int addValue, bool changeOther = false)
    {
        ReputationData data = GetReputationData(forceID);
        ReputationCamp camp = data.GetReputationCamp(targetPlayerID);

        SetReputationValueByForce(forceID, targetPlayerID, addValue + camp.reputationValue);
        if (data.active && changeOther && PeGameMgr.IsStory)
        {
            int otherChangeValue = (int)(addValue * ((addValue > 0) ? ChangeValueProportion : (1f / ChangeValueProportion)));

            List <int> playerIDList = data.GetReputationCampIDs();
            for (int i = 0; i < playerIDList.Count; i++)
            {
                if (playerIDList[i] != targetPlayerID)
                {
                    ReputationCamp otherCamp = data.GetReputationCamp(playerIDList[i]);
                    SetReputationValueByForce(forceID, playerIDList[i], otherChangeValue + otherCamp.reputationValue);
                }
            }
        }
    }
    /// <summary>
    /// Gets the belligerency.
    /// </summary>
    bool GetBelligerencyByForce(int forceID, int targetPlayerID)
    {
        ReputationData data = GetReputationData(forceID);

        return(data.GetReputationCamp(targetPlayerID).belligerency);
    }
    /// <summary>
    /// Gets the reputation level.
    /// </summary>
    ReputationLevel GetReputationLevelByForce(int forceID, int targetPlayerID)
    {
        ReputationData data = GetReputationData(forceID);

        return(data.GetReputationCamp(targetPlayerID).level);
    }
    /// <summary>
    /// Gets the level threshold.
    /// </summary>
    /// <returns>The abs level threshold.</returns>
    int GetLevelThresholdByForce(int forceID, int targetPlayerID)
    {
        ReputationData data = GetReputationData(forceID);

        return(GetLevelThreshold(data.GetReputationCamp(targetPlayerID).level));
    }
    /// <summary>
    /// Gets the reputation value.
    /// </summary>
    /// <returns>The abs reputation value.</returns>
    int GetReputationValueByForce(int forceID, int targetPlayerID)
    {
        ReputationData data = GetReputationData(forceID);

        return(data.GetReputationCamp(targetPlayerID).reputationValue);
    }