Example #1
0
    /// <summary>
    /// 是否有某奖励的位置
    /// </summary>
    public bool hasRewardPlace(int rewardID, int num = 1)
    {
        RewardConfig config = RewardConfig.get(rewardID);

        //没有随机
        if (config.randomListID <= 0)
        {
            int n = 0;
            int sMax;

            foreach (DIntData v in config.items)
            {
                if ((sMax = ItemConfig.get(v.key).singlePlusMax) > 0)
                {
                    n += (v.value * num + sMax - 1) / sMax;
                }
                else
                {
                    n += 1;
                }
            }

            return(hasFreeGrid(n));
        }
        else
        {
            return(hasFreeGrid(RewardConfig.get(rewardID).needGrid *num));
        }
    }
Example #2
0
    /** 判断是否有单个物品位置(核心) */
    protected override bool doHasItemPlaceC(int id, int num, ItemData data)
    {
        ItemConfig config;

        if (data != null)
        {
            data.makeConfig();
            config = data.config;
        }
        else
        {
            config = ItemConfig.get(id);
        }

        //自动使用道具
        if (config.type == ItemType.Tool && config.passEnterBag)
        {
            return(true);
        }

        int totalNum = _itemNums.get(id);

        //超出总上限
        if (config.totalPlusMax > 0 && (totalNum + num) > config.totalPlusMax)
        {
            return(false);
        }

        return(true);
    }
Example #3
0
    protected void onGUIFieldItem()
    {
        if (_currentSceneData == null)
        {
            return;
        }

        GUILayout.Label("物品ID:", GUILayout.Width(60));

        _chooseFieldItemIDStr = GUILayout.TextField(_chooseFieldItemIDStr, GUILayout.Width(100));

        if (GUILayout.Button("选择物品", GUI.skin.button, GUILayout.Width(60), GUILayout.Height(20)))
        {
            int itemID;

            if (int.TryParse(_chooseFieldItemIDStr, out itemID))
            {
                ItemConfig itemConfig = ItemConfig.get(itemID);

                if (itemConfig == null)
                {
                    Ctrl.print("找不到物品数据", itemID);
                }
                else
                {
                    chooseFieldItem(itemConfig);
                }
            }
            else
            {
                Ctrl.print("输入错误");
            }
        }
    }
Example #4
0
 /// <summary>
 /// 初始化身份
 /// </summary>
 public void makeConfig()
 {
     if (config == null)
     {
         config = ItemConfig.get(id);
     }
 }
Example #5
0
    /// <summary>
    /// 执行使用物品
    /// </summary>
    public void toUseItem(int id, int num, UseItemArgData arg)
    {
        int[][] actions;

        if ((actions = ItemConfig.get(id).useActions) != null)
        {
            doItemUseActions(actions, num, arg);
        }

        toLogRemoveItem(id, num, CallWayType.UseItem);

        onItemUse(id, num, null, arg);
    }
    /** 是否有物品位置 */
    public bool hasItemPlace(DIntData[] dataArr)
    {
        DIntData data;

        if (dataArr.Length == 1)
        {
            data = dataArr[0];
            return(hasItemPlace(data.key, data.value));
        }

        _tempDic.clear();

        for (int i = 0, len = dataArr.Length; i < len; ++i)
        {
            data = dataArr[i];

            if (!ensureNum(data.value))
            {
                _tempDic.clear();
                return(false);
            }

            //有必要
            if (ItemConfig.get(data.key).totalPlusMax > 0)
            {
                _tempDic.put(data.key, data.value);
            }
        }

        if (!_tempDic.isEmpty())
        {
            ItemConfig config;

            foreach (var kv in _tempDic.entrySet())
            {
                config = ItemConfig.get(kv.key);

                //超出总上限
                if ((getItemNum(kv.key) + kv.value) > config.totalPlusMax)
                {
                    return(false);
                }
            }
        }

        return(hasFreeGrid(dataArr.Length));
    }
    /** 是否有物品位置 */
    public bool hasItemPlace(SList <ItemData> list)
    {
        if (list.size() == 1)
        {
            return(hasItemPlace(list.get(0)));
        }

        _tempDic.clear();

        ItemData[] values = list.getValues();
        ItemData   data;

        for (int i = 0, len = list.size(); i < len; ++i)
        {
            data = values[i];

            if (!ensureNum(data.num))
            {
                _tempDic.clear();
                return(false);
            }

            //有必要
            if (ItemConfig.get(data.id).totalPlusMax > 0)
            {
                _tempDic.put(data.id, data.num);
            }
        }

        if (!_tempDic.isEmpty())
        {
            ItemConfig config;

            foreach (var kv in _tempDic.entrySet())
            {
                config = ItemConfig.get(kv.key);

                //超出总上限
                if ((getItemNum(kv.key) + kv.value) > config.totalPlusMax)
                {
                    return(false);
                }
            }
        }

        return(hasFreeGrid(list.size()));
    }
Example #8
0
    /// <summary>
    /// 创建物品数据
    /// </summary>
    public ItemData createItem(int id, int num)
    {
        ItemConfig config = ItemConfig.get(id);

        ItemData data = createItemByType(config.type);

        data.id     = id;
        data.num    = num;
        data.config = config;
        //失效时间
        data.disableTime = config.enableTimeT.getNextTime();

        //额外初始化
        BaseC.logic.initItem(data, id);

        return(data);
    }
Example #9
0
    /** 创建物品数据(如id<=0则为空) */
    public ItemData createItem(int id, int num)
    {
        if (id <= 0)
        {
            return(null);
        }

        ItemConfig config = ItemConfig.get(id);

        ItemData data = GameC.pool.createItemData(config.type);

        data.initIdentityByType(config.type);
        data.id     = id;
        data.num    = num;
        data.config = config;
        //失效时间
        data.disableTime = config.enableTimeT.getNextTime();

        //额外初始化
        initItem(data, id);

        return(data);
    }
Example #10
0
    private void makeElementModel(SceneElementEditorData data)
    {
        switch (data.config.type)
        {
        case SceneElementType.Npc:
        {
        }
        break;

        case SceneElementType.Monster:
        {
            MonsterConfig monsterConfig = MonsterConfig.get(data.config.id);

            data.gameObject = createModel(FightUnitConfig.get(monsterConfig.fightUnitID).modelID, data);
        }
        break;

        case SceneElementType.Operation:
        {
            OperationConfig operationConfig = OperationConfig.get(data.config.id);

            data.gameObject = createModel(operationConfig.modelID, data);
        }
        break;

        case SceneElementType.FieldItem:
        {
            ItemConfig itemConfig = ItemConfig.get(data.config.id);

            data.gameObject = createModel(itemConfig.fieldItemModelID, data);
        }
        break;
        }

        setPosToGameObject(data);
    }
Example #11
0
    /** 执行添加一个物品(核心) */
    protected override bool doAddItemC(int id, int num, ItemData data)
    {
        ItemConfig config;

        if (data != null)
        {
            data.makeConfig();
            config = data.config;
        }
        else
        {
            config = ItemConfig.get(id);
        }

        if (config.type == ItemType.Tool && config.passEnterBag)
        {
            _operateRecordAddListForAutoUse.add2(id, num);
            return(true);
        }

        ItemRecordData rData = getRecordDataAbs(id);

        //超出总上限
        if (config.totalPlusMax > 0 && (rData.num + num) > config.totalPlusMax)
        {
            return(false);
        }

        //是否单个叠加
        bool isSingleOne = config.singlePlusMax == 1;
        //是否绑定
        bool isBind = config.bindByGet || (data != null && data.isBind);
        //失效时间
        long disableTime = config.enableTimeT == null ? -1L : (data != null ? data.disableTime : config.enableTimeT.getNextTime());

        int      itemPos;
        int      index = -1;
        int      tempIndex;
        ItemData tData;
        int      dNum;

        while (true)
        {
            //单个叠加
            if (isSingleOne)
            {
                if (isGridFull())
                {
                    return(false);
                }

                index = _nextFreeGridIndex;
                tData = null;
            }
            else
            {
                //没找到添加位置
                if ((itemPos = rData.addIndex) == -1)
                {
                    if (isGridFull())
                    {
                        return(false);
                    }

                    index = _nextFreeGridIndex;
                    tData = null;
                }
                else
                {
                    //新值
                    if (index < itemPos)
                    {
                        index = itemPos;
                    }

                    //找不到添加位置
                    if ((tempIndex = findNextItemAddPos(id, index, isBind, disableTime, data)) == -1)
                    {
                        if (isGridFull())
                        {
                            return(false);
                        }

                        index = _nextFreeGridIndex;
                        tData = null;
                    }
                    else
                    {
                        tData = _list.get(index = tempIndex);
                    }
                }
            }

            //要叠加
            if (tData != null)
            {
                //装的下
                if (config.singlePlusMax <= 0 || (dNum = (config.singlePlusMax - tData.num)) >= num)
                {
                    dNum = num;
                    num  = 0;
                }
                else
                {
                    num -= dNum;
                }

                tData.num += dNum;              //计数加

                //操作记录
                _operateRecordList.add2(index, dNum);
                doAddItemPartial(index, rData, dNum, tData);

                //完了
                if (num == 0)
                {
                    return(true);
                }
            }
            //新位置
            else
            {
                //单包上限都超的
                if (config.singlePlusMax > 0 && num > config.singlePlusMax)
                {
                    dNum = config.singlePlusMax;
                    num -= dNum;
                }
                else
                {
                    dNum = num;
                    num  = 0;
                }

                //最后的一次加
                if (data != null && num == 0 && isSingleOne)
                {
                    tData     = data;
                    tData.num = dNum;                  //数目再赋值
                }
                else
                {
                    tData            = createItemByType(config.type);
                    tData.id         = id;
                    tData.num        = dNum;
                    tData.config     = config;
                    tData.canRelease = true;                  //标记可回收
                    //额外初始化
                    BaseC.logic.initItem(tData, id);
                }

                //赋值
                tData.isBind      = isBind;
                tData.disableTime = disableTime;

                _operateRecordList.add2(index, dNum);
                doAddItemNew(index, rData, dNum, tData);

                //完了
                if (num == 0)
                {
                    return(true);
                }
            }
        }
    }
Example #12
0
    /** 判断是否有单个物品位置(核心) */
    protected override bool doHasItemPlaceC(int id, int num, ItemData data)
    {
        ItemConfig config;

        if (data != null)
        {
            data.makeConfig();
            config = data.config;
        }
        else
        {
            config = ItemConfig.get(id);
        }

        ItemRecordData rData = getRecordData(id);

        //自动使用道具
        if (config.type == ItemType.Tool && config.passEnterBag)
        {
            return(true);
        }

        //超出总上限
        if (config.totalPlusMax > 0 && ((rData != null ? rData.num : 0) + num) > config.totalPlusMax)
        {
            return(false);
        }

        //无上限
        if (_gridNum <= 0)
        {
            return(true);
        }

        //超单个上限的
        if (config.singlePlusMax > 0 && num >= config.singlePlusMax)
        {
            int needGridNum = (int)Mathf.Ceil((float)num / config.singlePlusMax);

            return(needGridNum <= doGetFreeGridNum());
        }

        //有空余格子
        if (!isGridFull())
        {
            return(true);
        }

        if (config.singlePlusMax == 1 || config.enableTimeT != null)
        {
            return(false);
        }

        int itemPos = rData != null ? rData.addIndex : -1;

        //没找到添加位置
        if (itemPos == -1)
        {
            return(false);
        }
        else
        {
            ItemData tData = _list.get(itemPos);

            //是否绑定
            bool isBind = config.bindByGet || (data != null && data.isBind);

            if (tData.isBind != isBind)
            {
                return(false);
            }

            if (config.singlePlusMax <= 0)
            {
                return(true);
            }

            return(config.singlePlusMax - tData.num >= num);
        }
    }
Example #13
0
    /// <summary>
    /// 读完所有表后处理
    /// </summary>
    public static void afterReadConfigAll()
    {
        if (_dic == null)
        {
            return;
        }

        RandomItemListConfig[] values;
        RandomItemListConfig   v;

        for (int i = (values = _dic.getValues()).Length - 1; i >= 0; --i)
        {
            if ((v = values[i]) != null)
            {
                switch (v.type)
                {
                case RandomItemListType.SingleItem:
                {
                    int itemID = v.args[0][0];
                    if (itemID > 0 && ItemConfig.get(itemID) == null)
                    {
                        Ctrl.throwError("找不到物品ID", itemID);
                        return;
                    }
                }
                break;

                case RandomItemListType.SingleRandomItem:
                {
                    int randomItemID = v.args[0][0];

                    if (randomItemID > 0 && RandomItemConfig.get(randomItemID) == null)
                    {
                        Ctrl.throwError("找不到随机物品ID", randomItemID);
                        return;
                    }
                }
                break;

                case RandomItemListType.SumProbRandomItem:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[1] > 0 && RandomItemConfig.get(v2[1]) == null)
                        {
                            Ctrl.throwError("找不到随机物品ID", v2[1]);
                            return;
                        }
                    }
                }
                break;

                case RandomItemListType.WeightRandomList:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[1] > 0 && RandomItemListConfig.get(v2[1]) == null)
                        {
                            Ctrl.throwError("找不到随机物品组ID", v2[1]);
                            return;
                        }
                    }
                }
                break;
                }

                //直接算出统计
                v.getNeedGridNum();
            }
        }
    }
Example #14
0
 /// <summary>
 /// 重载配置
 /// </summary>
 public void reloadConfig()
 {
     config = ItemConfig.get(id);
 }
Example #15
0
    /** 执行添加一个物品(核心) */
    protected override bool doAddItemC(int id, int num, ItemData data)
    {
        ItemConfig config;

        if (data != null)
        {
            data.makeConfig();
            config = data.config;
        }
        else
        {
            config = ItemConfig.get(id);
        }

        if (config.type == ItemType.Tool && config.passEnterBag)
        {
            _operateRecordAddListForAutoUse.add2(id, num);
            return(true);
        }

        int totalNum = _itemNums.get(id);

        //超出总上限
        if (config.totalPlusMax > 0 && (totalNum + num) > config.totalPlusMax)
        {
            return(false);
        }

        //是否单个叠加
        bool isSingleOne = config.singlePlusMax == 1;
        //是否绑定
        bool isBind = config.bindByGet || (data != null && data.isBind);
        //失效时间
        long disableTime = data != null ? data.disableTime : config.enableTimeT.getNextTime();

        int      itemPos;
        int      index = -1;
        int      tempIndex;
        ItemData tData;
        int      dNum;

        IntObjectMap <ItemData> itemDic = getItemDicByIDAbs(id);

        //非单个
        if (!isSingleOne)
        {
            ItemData[] values;
            ItemData   v;

            for (int i = (values = itemDic.getValues()).Length - 1; i >= 0; --i)
            {
                if ((v = values[i]) != null)
                {
                    //满足叠加规则
                    if (!v.isSingleNumMax() && v.isBind == isBind && v.disableTime == disableTime && (data == null || canPlusEx(v, data)))
                    {
                        //装的下
                        if (config.singlePlusMax <= 0 || (dNum = (config.singlePlusMax - v.num)) >= num)
                        {
                            dNum = num;
                            num  = 0;
                        }
                        else
                        {
                            num -= dNum;
                        }

                        v.num += dNum;                      //计数加

                        //序号
                        index = v.index;

                        //操作记录
                        _operateRecordList.add2(index, dNum);

                        doAddItemPartial(index, dNum, v);

                        //完了
                        if (num == 0)
                        {
                            return(true);
                        }
                    }
                }
            }
        }

        if (num > 0)
        {
            while (true)
            {
                //单包上限都超的
                if (config.singlePlusMax > 0 && num > config.singlePlusMax)
                {
                    dNum = config.singlePlusMax;
                    num -= dNum;
                }
                else
                {
                    dNum = num;
                    num  = 0;
                }

                //最后的一次加,或者新添加,并且单个叠加的才可直接使用原数据
                if (data != null && num == 0 && isSingleOne)
                {
                    tData     = data;
                    tData.num = dNum;                  //数目再赋值
                }
                else
                {
                    tData            = createItemByType(config.type);
                    tData.id         = id;
                    tData.num        = dNum;
                    tData.config     = config;
                    tData.canRelease = true;                  //标记可回收
                    //额外初始化
                    BaseC.logic.initItem(tData, id);
                }

                //获得新序号
                index = tData.index = getNewIndex();

                //赋值
                tData.isBind      = isBind;
                tData.disableTime = disableTime;

                _operateRecordList.add2(index, dNum);
                doAddItemNew(index, dNum, tData);

                //完了
                if (num == 0)
                {
                    return(true);
                }
            }
        }

        return(true);
    }
Example #16
0
    /// <summary>
    /// 读完所有表后处理
    /// </summary>
    public static void afterReadConfigAll()
    {
        if (_dic == null)
        {
            return;
        }

        RandomItemConfig[] values;
        RandomItemConfig   v;

        for (int i = (values = _dic.getValues()).Length - 1; i >= 0; --i)
        {
            if ((v = values[i]) != null)
            {
                switch (v.type)
                {
                case RandomItemType.Single:
                {
                    int itemID = v.args[0][0];
                    if (itemID > 0 && ItemConfig.get(itemID) == null)
                    {
                        Ctrl.throwError("找不到物品ID", itemID);
                        return;
                    }
                }
                break;

                case RandomItemType.AverageItem:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[0] > 0 && ItemConfig.get(v2[0]) == null)
                        {
                            Ctrl.throwError("找不到物品ID", v2[0]);
                            return;
                        }
                    }
                }
                break;

                case RandomItemType.WeightItem:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[1] > 0 && ItemConfig.get(v2[1]) == null)
                        {
                            Ctrl.throwError("找不到物品ID", v2[1]);
                            return;
                        }
                    }
                }
                break;

                case RandomItemType.WeightCreateItem:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[1] > 0 && CreateItemConfig.get(v2[1]) == null)
                        {
                            Ctrl.throwError("找不到创建物品ID", v2[1]);
                            return;
                        }
                    }
                }
                break;

                case RandomItemType.WeightRandomItem:
                {
                    foreach (int[] v2 in v.args)
                    {
                        if (v2[1] > 0 && RandomItemConfig.get(v2[1]) == null)
                        {
                            Ctrl.throwError("找不到随机物品ID", v2[1]);
                            return;
                        }
                    }
                }
                break;
                }
            }
        }
    }
Example #17
0
    //--主显示部分--//

    /** 初始化主显示 */
    protected virtual void initMainShow()
    {
        bool hasModel = false;

        if (_data.avatar != null && _data.avatar.modelID > 0)
        {
            hasModel = true;

            setModel(_data.avatar.modelID);

            _data.avatar.parts.forEach((k, v) =>
            {
                setPart(k, _unit.avatar.getShowPart(k));
            });
        }

        if (BaseC.constlist.unit_canFight(_data.identity.type))
        {
            int fightUnitID = _data.getFightIdentity().getFightUnitID();

            if (fightUnitID > 0)
            {
                FightUnitConfig fConfig = FightUnitConfig.get(fightUnitID);

                if (!hasModel && fConfig.modelID > 0)
                {
                    setModel(fConfig.modelID);
                }

                if (fConfig.effectID > 0)
                {
                    addEffect(fConfig.effectID);
                }
            }
        }

        //特殊的

        switch (_unit.type)
        {
        case UnitType.SceneEffect:
        {
            SceneEffectIdentityData iData = _data.getSceneEffectIdentity();

            if (iData.signedEffectID > 0)
            {
                addOrPlayEffect(iData.signedEffectID);
            }
            else
            {
                SceneEffectConfig config = SceneEffectConfig.get(((SceneEffectIdentityData)_data.identity).signedEffectID);

                if (config.modelID > 0)
                {
                    setModel(config.modelID);
                }

                if (config.effectID > 0)
                {
                    addOrPlayEffect(config.effectID);
                }
            }
        }
        break;

        case UnitType.FieldItem:
        {
            FieldItemIdentityData iData = (FieldItemIdentityData)_data.identity;

            ItemConfig itemConfig = ItemConfig.get(iData.item.id);

            if (itemConfig.fieldItemModelID > 0)
            {
                setModel(itemConfig.fieldItemModelID);
            }
        }
        break;
        }
    }