| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Linq;
|
| | | using UnityEngine;
|
| | |
|
| | | namespace vnxbqy.UI
|
| | | {
|
| | |
| | | public int defaultLv; //默认勾选x级物品
|
| | | bool isLoginOk = false;
|
| | | bool isStart = false;
|
| | |
|
| | | public bool isTrigger = false;
|
| | | //<矿物ID,矿物LV>
|
| | | public Dictionary<int, int> nowChooseDict = new Dictionary<int, int>();
|
| | |
|
| | |
| | | //福地物品表没这项
|
| | | if (!MineAreaItemConfig.TryGetMineID(itemId, defaultLv, out int mineId1))
|
| | | continue;
|
| | | nowChooseDict[itemId] = defaultLv; |
| | | nowChooseDict[itemId] = defaultLv;
|
| | | }
|
| | |
|
| | | }
|
| | |
| | | int energyUsed = blessedLandModel.EnergyUsed;
|
| | | int totalEnergy = blessedLandModel.GetTotalEnergy();
|
| | | if (energyUsed >= totalEnergy)
|
| | | {
|
| | | Stop();
|
| | | return;
|
| | | }
|
| | | // 没有合适物品
|
| | | bool isHasSuitableItem = TrySend();
|
| | | if (!isHasSuitableItem)
|
| | |
| | | blessedLandModel.lastSurroundRefreshTime = TimeUtility.AllSeconds;
|
| | | blessedLandModel.SetTime(0);
|
| | | blessedLandModel.SaveAllTime();
|
| | | isTrigger = true;
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | //是否有合适的物品
|
| | | private bool TrySend()
|
| | | {
|
| | | if (blessedLandModel.newAreaDataDict.IsNullOrEmpty())
|
| | | return false;
|
| | | var chooseMineIDList = GetChooseMineIDList();
|
| | | //没有用户勾选的物品列表
|
| | | if (chooseMineIDList.IsNullOrEmpty())
|
| | | return false;
|
| | | //一个福地信息也没有
|
| | | var newAreaDataDict = blessedLandModel.newAreaDataDict;
|
| | | if (newAreaDataDict.IsNullOrEmpty())
|
| | | return false;
|
| | |
|
| | | uint myPlayerId = blessedLandModel.myPlayerId;
|
| | |
|
| | | bool isHas = false;
|
| | | //当前空闲工人数量
|
| | | int nowFreeWorkerCount = blessedLandModel.GetNowFreeWorkerCount();
|
| | | //当前可用工人体力
|
| | | int nowCanUseEnergy = blessedLandModel.GetNowCanUseEnergy();
|
| | | //最大可发包数量 = 当前空闲工人数、剩余疲劳数, 两者取最小值
|
| | | int sandCntMax = Mathf.Min(nowCanUseEnergy, nowFreeWorkerCount);
|
| | | //当前发了多少包
|
| | | int nowSendCnt = 0;
|
| | | //敌对福地和周围福地已经发过包的玩家ID
|
| | | List<uint> sendPlayerIDList = new List<uint>();
|
| | |
|
| | | for (int i = 0; i < chooseMineIDList.Count; i++)
|
| | | for (int i = 0; i < sandCntMax; i++)
|
| | | {
|
| | | int mineID = chooseMineIDList[i];
|
| | | if (!MineAreaItemConfig.Has(mineID))
|
| | | continue;
|
| | | MineAreaItemConfig mineAreaItemConfig = MineAreaItemConfig.Get(mineID);
|
| | | int itemId = mineAreaItemConfig.ItemID;
|
| | | int itemLv = mineAreaItemConfig.ItemLV;
|
| | |
|
| | | //先找个人福地
|
| | | if (blessedLandModel.newAreaDataDict.ContainsKey(blessedLandModel.myPlayerId) &&
|
| | | !blessedLandModel.newAreaDataDict[blessedLandModel.myPlayerId].MineItems.IsNullOrEmpty())
|
| | | if (!isStart || nowSendCnt >= sandCntMax)
|
| | | return isHas;
|
| | | for (int j = 0; j < chooseMineIDList.Count; j++)
|
| | | {
|
| | | var mineItemsList = blessedLandModel.newAreaDataDict[blessedLandModel.myPlayerId].MineItems.Keys.ToList();
|
| | | mineItemsList.Sort((int a, int b) => SortByItemLV(blessedLandModel.myPlayerId, a, b));
|
| | | for (int j = 0; j < mineItemsList.Count; j++)
|
| | | {
|
| | | // 没有空闲老鼠
|
| | | int allWorkerCount = blessedLandModel.WorkerCount;
|
| | | int freeWorkerCount = allWorkerCount - blessedLandModel.GetWorkingCount();
|
| | | if (freeWorkerCount < 0)
|
| | | return isHas;
|
| | | // 工人体力耗尽
|
| | | int energyUsed = blessedLandModel.EnergyUsed;
|
| | | int totalEnergy = blessedLandModel.GetTotalEnergy();
|
| | | if (energyUsed >= totalEnergy)
|
| | | return isHas;
|
| | | if (!isStart || nowSendCnt >= sandCntMax)
|
| | | return isHas;
|
| | | int mineID = chooseMineIDList[j];
|
| | | if (!MineAreaItemConfig.Has(mineID))
|
| | | continue;
|
| | | MineAreaItemConfig mineAreaItemConfig = MineAreaItemConfig.Get(mineID);
|
| | | int itemId = mineAreaItemConfig.ItemID;
|
| | | int itemLv = mineAreaItemConfig.ItemLV;
|
| | |
|
| | | int index = mineItemsList[j];
|
| | | var mineItem = blessedLandModel.newAreaDataDict[blessedLandModel.myPlayerId].MineItems[index];
|
| | | if (!MineAreaItemConfig.Has(mineItem.MineID))
|
| | | continue;
|
| | | MineAreaItemConfig config = MineAreaItemConfig.Get(mineItem.MineID);
|
| | | //不是指定的矿物
|
| | | if (itemId != config.ItemID || config.ItemLV < itemLv)
|
| | | continue;
|
| | | //当前项已在拉取
|
| | | if (mineItem.WorkerCount > 0)
|
| | | continue;
|
| | | blessedLandModel.SendCB030Pack(blessedLandModel.myPlayerId, (byte)index, (byte)1, 0);
|
| | | isHas = true;
|
| | | }
|
| | | }
|
| | |
|
| | | //找周围福地
|
| | | if (!blessedLandModel.typeToPlayerIDs.IsNullOrEmpty() && blessedLandModel.typeToPlayerIDs.ContainsKey(3))
|
| | | {
|
| | | List<uint> keyList = blessedLandModel.typeToPlayerIDs[3];
|
| | | for (int j = 0; j < keyList.Count; j++)
|
| | | MineAreaInfo mineAreaInfo;
|
| | | List<uint> playerIDList;
|
| | | //先找个人福地
|
| | | if (newAreaDataDict.TryGetValue(myPlayerId, out mineAreaInfo) && !mineAreaInfo.MineItems.IsNullOrEmpty())
|
| | | {
|
| | | uint playerId = keyList[j];
|
| | | if (blessedLandModel.newAreaDataDict.ContainsKey(playerId))
|
| | | var mineItemsList = mineAreaInfo.MineItems.Keys.ToList();
|
| | | mineItemsList.Sort((int a, int b) => SortByItemLV(myPlayerId, a, b));
|
| | | for (int k = 0; k < mineItemsList.Count; k++)
|
| | | {
|
| | | var mineItems = blessedLandModel.newAreaDataDict[playerId].MineItems;
|
| | | if (!isStart || nowSendCnt >= sandCntMax)
|
| | | return isHas;
|
| | | int index = mineItemsList[k];
|
| | | var mineItem = mineAreaInfo.MineItems[index];
|
| | | if (!MineAreaItemConfig.Has(mineItem.MineID))
|
| | | continue;
|
| | | MineAreaItemConfig config = MineAreaItemConfig.Get(mineItem.MineID);
|
| | | //当前项已在拉取
|
| | | if (mineItem.WorkerCount > 0)
|
| | | continue;
|
| | | //不是指定的矿物
|
| | | if (itemId != config.ItemID || config.ItemLV < itemLv)
|
| | | continue;
|
| | | blessedLandModel.SendCB030Pack(myPlayerId, (byte)index, (byte)1, 0);
|
| | | isHas = true;
|
| | | nowSendCnt += 1;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | //找周围福地
|
| | | if (!blessedLandModel.typeToPlayerIDs.IsNullOrEmpty() && blessedLandModel.typeToPlayerIDs.TryGetValue(3, out playerIDList))
|
| | | {
|
| | | for (int k = 0; k < playerIDList.Count; k++)
|
| | | {
|
| | | uint playerId = playerIDList[k];
|
| | | if (!isStart || nowSendCnt >= sandCntMax)
|
| | | return isHas;
|
| | | if (!newAreaDataDict.TryGetValue(playerId, out mineAreaInfo))
|
| | | continue;
|
| | | if (sendPlayerIDList.Contains(playerId))
|
| | | continue;
|
| | |
|
| | | var mineItems = mineAreaInfo.MineItems;
|
| | | var mineItemsList = mineItems.Keys.ToList();
|
| | | mineItemsList.Sort((int a, int b) => SortByItemLV(playerId, a, b));
|
| | | for (int k = 0; k < mineItemsList.Count; k++)
|
| | | for (int l = 0; l < mineItemsList.Count; l++)
|
| | | {
|
| | | // 没有空闲老鼠
|
| | | int allWorkerCount = blessedLandModel.WorkerCount;
|
| | | int freeWorkerCount = allWorkerCount - blessedLandModel.GetWorkingCount();
|
| | | if (freeWorkerCount < 0)
|
| | | return isHas;
|
| | | // 工人体力耗尽
|
| | | int energyUsed = blessedLandModel.EnergyUsed;
|
| | | int totalEnergy = blessedLandModel.GetTotalEnergy();
|
| | | if (energyUsed >= totalEnergy)
|
| | | return isHas;
|
| | | int index = mineItemsList[k];
|
| | | int index = mineItemsList[l];
|
| | | var mineItem = mineItems[index];
|
| | | if (!MineAreaItemConfig.Has(mineItem.MineID))
|
| | | continue;
|
| | |
| | | bool isSnatchItem = blessedLandModel.IsSnatchItem(playerId);
|
| | | if (isSnatchItem)
|
| | | break;
|
| | |
|
| | | blessedLandModel.SendCB030Pack(playerId, (byte)index, (byte)1, 0);
|
| | | isHas = true;
|
| | | nowSendCnt += 1;
|
| | | if (!sendPlayerIDList.Contains(playerId))
|
| | | sendPlayerIDList.Add(playerId);
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | //找敌对福地
|
| | | if (!blessedLandModel.typeToPlayerIDs.IsNullOrEmpty() && blessedLandModel.typeToPlayerIDs.ContainsKey(2))
|
| | | {
|
| | | List<uint> keyList = blessedLandModel.typeToPlayerIDs[2];
|
| | | for (int j = 0; j < keyList.Count; j++)
|
| | |
|
| | | //找敌对福地
|
| | | if (!blessedLandModel.typeToPlayerIDs.IsNullOrEmpty() && blessedLandModel.typeToPlayerIDs.TryGetValue(2, out playerIDList))
|
| | | {
|
| | | uint playerId = keyList[j];
|
| | | if (blessedLandModel.newAreaDataDict.ContainsKey(playerId))
|
| | | for (int k = 0; k < playerIDList.Count; k++)
|
| | | {
|
| | | var mineItems = blessedLandModel.newAreaDataDict[playerId].MineItems;
|
| | | uint playerId = playerIDList[k];
|
| | | if (!isStart || nowSendCnt >= sandCntMax)
|
| | | return isHas;
|
| | | if (!newAreaDataDict.TryGetValue(playerId, out mineAreaInfo))
|
| | | continue;
|
| | | if (sendPlayerIDList.Contains(playerId))
|
| | | continue;
|
| | | var mineItems = mineAreaInfo.MineItems;
|
| | | var mineItemsList = mineItems.Keys.ToList();
|
| | | mineItemsList.Sort((int a, int b) => SortByItemLV(playerId, a, b));
|
| | | for (int k = 0; k < mineItemsList.Count; k++)
|
| | | for (int l = 0; l < mineItemsList.Count; l++)
|
| | | {
|
| | | // 没有空闲老鼠
|
| | | int allWorkerCount = blessedLandModel.WorkerCount;
|
| | | int freeWorkerCount = allWorkerCount - blessedLandModel.GetWorkingCount();
|
| | | if (freeWorkerCount < 0)
|
| | | return isHas;
|
| | | // 工人体力耗尽
|
| | | int energyUsed = blessedLandModel.EnergyUsed;
|
| | | int totalEnergy = blessedLandModel.GetTotalEnergy();
|
| | | if (energyUsed >= totalEnergy)
|
| | | return isHas;
|
| | |
|
| | | int index = mineItemsList[k];
|
| | | int index = mineItemsList[l];
|
| | | var mineItem = mineItems[index];
|
| | | if (!MineAreaItemConfig.Has(mineItem.MineID))
|
| | | continue;
|
| | |
| | | break;
|
| | | blessedLandModel.SendCB030Pack(playerId, (byte)index, (byte)1, 0);
|
| | | isHas = true;
|
| | | nowSendCnt += 1;
|
| | | if (!sendPlayerIDList.Contains(playerId))
|
| | | sendPlayerIDList.Add(playerId);
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | return isHas;
|
| | | }
|
| | |
|
| | |
| | |
|
| | | private void OnSecondEvent()
|
| | | {
|
| | | // 工人体力耗尽 立刻停掉自动采集
|
| | | int energyUsed = blessedLandModel.EnergyUsed;
|
| | | int totalEnergy = blessedLandModel.GetTotalEnergy();
|
| | | if (energyUsed >= totalEnergy)
|
| | | {
|
| | | Stop();
|
| | | return;
|
| | | }
|
| | |
|
| | | timer += 1;
|
| | | if (timer >= timeS)
|
| | | {
|
| | |
| | | {
|
| | | isLoginOk = false;
|
| | | startState = false;
|
| | | isTrigger = false;
|
| | | timer = 0;
|
| | | }
|
| | |
|