Пример #1
0
        /************************************************
         * 与仓库交换电池
         * *********************************************/
        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);
        }
Пример #2
0
    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);
    }