예제 #1
0
    /** 添加CD组 */
    public void reAddCDs(IntObjectMap <CDData> dic, int dTime)
    {
        if (dic.isEmpty())
        {
            return;
        }

        IntObjectMap <CDData> cds = _cds;

        if (!cds.isEmpty())
        {
            Ctrl.throwError("这时cd组不应该有值");
        }

        IntObjectMap <CDData> groupMaxCDs  = _groupMaxCDs;
        IntIntMap             groupCDCount = _groupCDCount;
        UnitFightDataLogic    parent       = _parent;

        CDData[] values = dic.getValues();
        CDData   v;

        for (int i = values.Length - 1; i >= 0; --i)
        {
            if ((v = values[i]) != null)
            {
                v.config    = CDConfig.get(v.id);
                v.timePass += dTime;

                //依然有效
                if (v.timePass < v.timeMax)
                {
                    cds.put(v.id, v);

                    foreach (int gv in v.config.groups)
                    {
                        groupCDCount.addValue(gv, 1);

                        CDData oldMax = groupMaxCDs.get(gv);

                        if (oldMax == null || oldMax.getLastTime() < v.getLastTime())
                        {
                            groupMaxCDs.put(gv, v);
                        }

                        //新的
                        if (oldMax == null)
                        {
                            parent.onStartGroupCD(gv);
                        }
                    }
                }
            }
        }

        _parent.onCDChange();
    }
예제 #2
0
    /** 开始服务器CD组 */
    public void startCDsByServer(SList <CDData> list)
    {
        IntObjectMap <CDData> cds          = _cds;
        IntObjectMap <CDData> groupMaxCDs  = _groupMaxCDs;
        IntIntMap             groupCDCount = _groupCDCount;
        UnitFightDataLogic    parent       = _parent;

        CDData   oldData;
        CDData   data;
        CDConfig config;

        foreach (CDData v in list)
        {
            config = CDConfig.get(v.id);

            if ((oldData = cds.get(v.id)) == null)
            {
                data        = v;
                data.config = config;

                cds.put(data.id, data);
            }
            else
            {
                data          = oldData;
                data.timePass = v.timePass;
                data.timeMax  = v.timeMax;
            }

            foreach (int gv in config.groups)
            {
                //计数加1
                if (oldData == null)
                {
                    groupCDCount.addValue(gv, 1);
                }

                CDData oldMax = groupMaxCDs.get(gv);

                if (oldMax == null || oldMax.getLastTime() < data.timeMax)
                {
                    groupMaxCDs.put(gv, data);
                }

                //新的
                if (oldMax == null)
                {
                    parent.onStartGroupCD(gv);
                }
            }
        }

        _parent.onCDChange();
    }
예제 #3
0
    private CDData toStartOneCD(CDConfig config, int time)
    {
        int id = config.id;
        int groupChangePercent = 0;
        int groupChangeValue   = 0;

        //千分比和数值均累加
        foreach (int gv in config.groups)
        {
            groupChangePercent += _groupCDChangePercents.get(gv);
            groupChangeValue   += _groupCDChangeValues.get(gv);
        }

        int timeMax = (int)(time * ((1000f + groupChangePercent) / 1000f) + groupChangeValue);

        CDData data = null;

        if (timeMax > 0)
        {
            CDData oldData;

            if ((oldData = _cds.get(id)) == null)
            {
                data        = new CDData();
                data.id     = id;
                data.config = config;

                _cds.put(data.id, data);
            }
            else
            {
                data = oldData;
            }

            data.timePass = 0;
            data.timeMax  = timeMax;

            foreach (int gv in config.groups)
            {
                //计数加1
                if (oldData == null)
                {
                    _groupCDCount.addValue(gv, 1);
                }

                CDData oldMax = _groupMaxCDs.get(gv);

                if (oldMax == null || oldMax.getLastTime() < timeMax)
                {
                    _groupMaxCDs.put(gv, data);
                }

                //新的
                if (oldMax == null)
                {
                    _parent.onStartGroupCD(gv);
                }
            }
        }

        return(data);
    }