/************************************************ * 与仓库交换电池 * *********************************************/ public static bool CsStrargeSupplyExchangeBattery(PeEntity npc, CSAssembly assembly, List <ItemObject> objs, int protoId, int count = 1) { if (assembly == null || assembly.Storages == null || npc.packageCmpt == null) { return(false); } List <ItemObject> curObjs = CSUtils.GetItemListInStorage(protoId, assembly); //当前背包里不可以用的item if (objs != null) { for (int i = 0; i < objs.Count; i++) { //put back if (CSUtils.AddItemObjToStorage(objs[i].instanceId, assembly)) { npc.packageCmpt.Remove(objs[i]); } } } if (curObjs.Count <= 0) { return(false); } for (int i = 0; i < curObjs.Count; i++) { Energy energy = curObjs[i].GetCmpt <Energy>(); if (energy != null && energy.floatValue.percent > 0) { if (CSUtils.RemoveItemObjFromStorage(curObjs[i].instanceId, assembly)) { return(npc.packageCmpt.Add(curObjs[i])); } } } return(false); }
public override List <ItemIdCount> GetRequirements() { int lifeItemCount = 0; int staminaItemCount = 0; int comfortItemCount = 0; int[] lifeItemList = NpcEatDb.GetEatIDs(EEatType.Hp); //--to do int[] staminaItemList = NpcEatDb.GetEatIDs(EEatType.Hunger); int[] comortItemList = NpcEatDb.GetEatIDs(EEatType.Comfort); foreach (int protoId in lifeItemList) { lifeItemCount += CSUtils.GetItemCountFromAllStorage(protoId, Assembly); } foreach (int protoId in staminaItemList) { staminaItemCount += CSUtils.GetItemCountFromAllStorage(protoId, Assembly); } foreach (int protoId in comortItemList) { comfortItemCount += CSUtils.GetItemCountFromAllStorage(protoId, Assembly); } List <ItemIdCount> requireList = new List <ItemIdCount> (); if (lifeItemCount < CYCLE_MIN_PER_NPC_LIFE * m_MgCreator.GetNpcCount) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_LIFE, Mathf.Max(CYCLE_ADD_MIN_LIFE, Mathf.CeilToInt(CYCLE_MIN_PER_NPC_LIFE * m_MgCreator.GetNpcCount * MAX_ADD_PERCENT_FOR_PER_NPC)))); } if (staminaItemCount < CYCLE_MIN_PER_NPC_STAMINA * m_MgCreator.GetNpcCount) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_STAMINA, Mathf.Max(CYCLE_ADD_MIN_STAMINA, Mathf.CeilToInt(CYCLE_MIN_PER_NPC_STAMINA * m_MgCreator.GetNpcCount * MAX_ADD_PERCENT_FOR_PER_NPC)))); } if (comfortItemCount < CYCLE_MIN_PER_NPC_COMFORT * m_MgCreator.GetNpcCount) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_COMFORT, Mathf.Max(CYCLE_ADD_MIN_COMFORT, Mathf.CeilToInt(CYCLE_MIN_PER_NPC_COMFORT * m_MgCreator.GetNpcCount * MAX_ADD_PERCENT_FOR_PER_NPC)))); } if (CYCLE_MIN_OTHER_0 > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_OTHER_0, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_OTHER_0, CYCLE_ADD_MIN_OTHER_0)); } if (CYCLE_MIN_OTHER_1 > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_OTHER_1, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_OTHER_1, CYCLE_ADD_MIN_OTHER_1)); } //battery List <ItemObject> allBattery = CSUtils.GetItemListInStorage(CYCLE_PROTOID_BATTERY, Assembly); if (allBattery.Count < CYCLE_MIN_BATTERY) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_BATTERY, CYCLE_ADD_MIN_BATTERY)); } else { int availableBattery = 0; foreach (ItemObject bat in allBattery) { Energy eg = bat.GetCmpt <Energy>(); if (eg != null && eg.energy.percent > BATTERY_AVAILABLE) { availableBattery++; } } if (availableBattery < CYCLE_MIN_BATTERY) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_BATTERY, CYCLE_ADD_MIN_BATTERY)); } } if (CYCLE_MIN_OTHER_3 > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_OTHER_3, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_OTHER_3, CYCLE_ADD_MIN_OTHER_3)); } if (CYCLE_MIN_PPCOAL > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_PPCOAL, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_PPCOAL, CYCLE_ADD_MIN_PPCOAL)); } if (CYCLE_MIN_PPFUSION > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_PPFUSION, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_PPFUSION, CYCLE_ADD_MIN_PPFUSION)); } if (CYCLE_MIN_WATER > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_WATER, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_WATER, CYCLE_ADD_MIN_WATER)); } if (CYCLE_MIN_INSECTICIDE > CSUtils.GetItemCountFromAllStorage(CYCLE_PROTOID_INSECTICIDE, Assembly)) { requireList.Add(new ItemIdCount(CYCLE_PROTOID_INSECTICIDE, CYCLE_ADD_MIN_INSECTICIDE)); } return(requireList); }