hch
5 小时以前 d67e53ae6cb3136b8e1836978b93a3021460ba29
Main/System/InternalAffairs/GoldRushManager.cs
@@ -7,7 +7,6 @@
//淘金功能
public class GoldRushManager : GameSystemManager<GoldRushManager>
{
    public const int funcID = 8;
    int campUnlockState;
    int workerUnlockState;
    public int panningCnt;  //累计总次数
@@ -15,7 +14,7 @@
    public int housekeeperEndTime;   // 自动管家到期时间戳,有值同时也代表免费试用已使用
    public byte[] warehouseIDList;  //完成的,包含0空,主要用于领取的索引
    public Dictionary<int, HB037_tagSCGoldRushCampInfo.tagSCGoldRushCamp> campInfoDict = new Dictionary<int, HB037_tagSCGoldRushCampInfo.tagSCGoldRushCamp>();
    public Dictionary<int, int> tmpCampIDToGoldID = new Dictionary<int, int>(); //最后一次营地淘金对应的物品,纯粹用于显示模型
    public Dictionary<int, List<int>> tmpCampWorkerSkinIDDict = new Dictionary<int, List<int>>(); //最后一次营地淘金对应的皮肤(预分配),纯粹用于显示模型
    public event Action<int> OnGoldRushCampEvent;    //服务端通知营地信息
    public event Action OnGoldRushInfoEvent;
@@ -23,7 +22,6 @@
    //行为事件
    public event Action<int> OnRefreshItemEvent; //刷新淘金道具
    public event Action<int, int, int> GoldRushEvent; //营地ID,执行事件(0出发,1返程),监工数量
    public event Action<PosEvent, bool, int, int, string> PathEvent; //事件,是否返程,营地ID,第几个工人,聊天内容(后续考虑传结构数据)
    public const int followWorkerCount = 3;   //小兵的数量,非监工
@@ -67,12 +65,12 @@
        get
        {
            //第十个数用于存储是否开启自动刷新,其他数用于存储物品等级
            var value = QuickSetting.Instance.GetQuickSettingValue<int>(QuickSettingType.AutoGoldRush, 10);
            var value = QuickSetting.Instance.GetQuickSettingValue<int>(QuickSettingType.AutoGoldRush, 9);
            return value == 0;
        }
        set
        {
            QuickSetting.Instance.SetQuickSetting<int>(QuickSettingType.AutoGoldRush, Convert.ToInt32(!value), 10);
            QuickSetting.Instance.SetQuickSetting<int>(QuickSettingType.AutoGoldRush, Convert.ToInt32(!value), 9);
            QuickSetting.Instance.SendPackage();
        }
@@ -85,7 +83,7 @@
    public int[] refreshMoneyList;
    public Dictionary<int, int> itemIDUnLockFuncIDDict = new Dictionary<int, int>();
    bool openAutoGoldRush
    public bool openAutoGoldRush
    {
        get
        {
@@ -125,6 +123,8 @@
    public PlayerDataType unLockMoneyType; //刷新用
    public float lastAssignWorkTime;
    public float lastCallBackTime;
    public override void Init()
@@ -218,12 +218,64 @@
        // }
    }
    public int GetRandommSkinID(int goldID, int index)
    int skinIDIndex;
    public int GetRandommSkinID()
    {
        return skinIDs[(goldID % skinIDs.Count + index) % skinIDs.Count]; ;
        var skinID = skinIDs[skinIDIndex % skinIDs.Count];
        skinIDIndex++;
        //从已解锁中随机
        // return skinIDs[UnityEngine.Random.Range(0, skinIDs.Count)];
        return skinID;
    }
    //参考:
    //未发布 goldid = 0 endtime不定(完成或者从未开始)
    //已发布未进行 goldid != 0 endtime = 0
    //已发布进行中 goldid != 0 endtime !=0
    //预分配监工皮肤
    void InitWorkerSkinID(HB037_tagSCGoldRushCampInfo.tagSCGoldRushCamp campInfo)
    {
        if (campInfo.EndTime == 0 && forceStopCampID == 0)
        {
            if (tmpCampWorkerSkinIDDict.ContainsKey(campInfo.CampID))
            {
                tmpCampWorkerSkinIDDict[campInfo.CampID].Clear();
            }
            return;
        }
        if (campInfo.GoldID != 0 && campInfo.EndTime != 0)
        {
            if (tmpCampWorkerSkinIDDict.ContainsKey(campInfo.CampID) && tmpCampWorkerSkinIDDict[campInfo.CampID].Count != 0)
            {
                return;
            }
            tmpCampWorkerSkinIDDict[campInfo.CampID] = new List<int>();
            for (int i = 0; i < campInfo.WorkerCnt; i++)
            {
                tmpCampWorkerSkinIDDict[campInfo.CampID].Add(GetRandommSkinID());
            }
        }
    }
    public int GetWorkerSkinID(int campID, int index)
    {
        if (tmpCampWorkerSkinIDDict.ContainsKey(campID))
        {
            var skinIDs = tmpCampWorkerSkinIDDict[campID];
            if (index < skinIDs.Count)
            {
                return skinIDs[index];
            }
            else
            {
                var skinID = GetRandommSkinID();
                skinIDs.Add(skinID);
                return skinID;
            }
        }
        //没有预分配则随机
        return skinIDs[UnityEngine.Random.Range(0, skinIDs.Count)];
    }
    void RefreshUnLockSkinID()
@@ -261,10 +313,7 @@
        for (int i = 0; i < netPack.CampCnt; i++)
        {
            campInfoDict[netPack.CampList[i].CampID] = netPack.CampList[i];
            if (netPack.CampList[i].GoldID != 0)
            {
                tmpCampIDToGoldID[netPack.CampList[i].CampID] = netPack.CampList[i].GoldID;
            }
            InitWorkerSkinID(netPack.CampList[i]);
            OnGoldRushCampEvent?.Invoke(netPack.CampList[i].CampID);
        }
@@ -304,14 +353,6 @@
        return 0;
    }
    public int GetCampLastGoldID(int campID)
    {
        if (tmpCampIDToGoldID.ContainsKey(campID))
        {
            return tmpCampIDToGoldID[campID];
        }
        return 0;
    }
    //获取营地工人
    public int GetCampWorkerCnt(int campID)
@@ -358,11 +399,20 @@
    }
    //有可进行和进行中的
    public bool HasWorking()
    public bool HasWork()
    {
        return campInfoDict.Values.Any(x => x.GoldID != 0);
    }
    //进行中的
    public bool HasWorking(int campID)
    {
        if (campInfoDict.ContainsKey(campID))
        {
            return campInfoDict[campID].GoldID != 0 && campInfoDict[campID].EndTime != 0;
        }
        return false;
    }
    public string GetCampItemName(GoldRushItemConfig config)
    {
@@ -382,9 +432,18 @@
        return (workerUnlockState & (1 << workerID)) != 0;
    }
    public int forceStopCampID;
    // 0-发布淘金(消耗淘金令);1-刷新淘金;2-开始淘金或调整监工数;3-取消淘金
    public void SendGoldRushOP(int opType, int campID, int workerCnt)
    {
        if (opType == 3)
        {
            forceStopCampID = campID;
        }
        if (opType == 2 && workerCnt < GetCampWorkerCnt(campID))
        {
            forceStopCampID = campID;
        }
        var pack = new CB036_tagCSGoldRushOP();
        pack.OPType = (byte)opType;
        pack.CampID = (byte)campID;
@@ -422,11 +481,6 @@
    }
    //通知外出行为事件
    public void NotifyGoldRushEvent(int campID, int eventType, int leaderCount)
    {
        GoldRushEvent?.Invoke(campID, eventType, leaderCount);
    }
    //通知路径行为事件
    public void NotifyPathEvent(PosEvent posEvent, bool isBack, int tendID, int index, string content)
@@ -448,26 +502,26 @@
    void UpdateRedpoint()
    {
        workerRedpoint.state = RedPointState.None;
        awardRedpoint.state = RedPointState.None;
        campRedpoint.state = RedPointState.None;
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.GoldRush))
            return;
        if (CheckCanUnLockWorker())
        {
            workerRedpoint.state = RedPointState.Simple;
        }
        else
        {
            workerRedpoint.state = RedPointState.None;
        }
        if (CheckHasFinishGoldRush())
        {
            awardRedpoint.state = RedPointState.Simple;
        }
        else
        if (CheckCanUnLockCamp())
        {
            awardRedpoint.state = RedPointState.None;
            campRedpoint.state = RedPointState.Simple;
        }
        campRedpoint.state = CheckCanUnLockCamp() ? RedPointState.Simple : RedPointState.None;
    }
    //玩家数据类型
@@ -657,7 +711,7 @@
            return;
        }
        if (UIHelper.GetMoneyCnt(52) <= 0 && !HasWorking())
        if (UIHelper.GetMoneyCnt(52) <= 0 && !HasWork())
        {
            PauseAutoWorking();
            SysNotifyMgr.Instance.ShowTip("GoldRush10");