Пример #1
0
        /// <summary>
        /// 重设战斗状态的标志
        /// </summary>
        public void ResetBattleState(BattleStatusType eType)
        {
            // 获取状态对应的引用计数
            int tmpType = (int)eType;
            int i       = 0;

            for (; i < mBattleStateRefNum.GetLength(0); ++i)
            {
                tmpType = tmpType >> 1;
                if (tmpType == 0)
                {
                    break;
                }
            }

            if (i < mBattleStateRefNum.GetLength(0))
            {
                mCurBattleState = FlagOperate.RemoveFlag(mCurBattleState, (int)eType);
                //kActor.BattleStateRefNum[i] = 0;
            }
            else
            {
                Debug.LogError("角色状态数值溢出 : " + eType);
            }
        }
Пример #2
0
        /// <summary>
        /// 增加战斗状态的标志
        /// </summary>
        public void AddBattleState(BattleStatusType eType)
        {
            if (mOwner == null)
            {
                return;
            }

            // 获取状态对应的引用计数
            int tmpType = (int)eType;
            int i       = 0;

            for (; i < mBattleStateRefNum.GetLength(0); ++i)
            {
                tmpType = tmpType >> 1;
                if (tmpType == 0)
                {
                    break;
                }
            }

            if (i < mBattleStateRefNum.GetLength(0))
            {
                // 增加角色状态的flag
                if (mBattleStateRefNum[i] < 255)
                {
                    mBattleStateRefNum[i] += 1;
                }

                mCurBattleState = FlagOperate.AddFlag(mCurBattleState, (int)eType);
            }
            else
            {
                Debug.LogError("角色状态数值溢出 : " + eType);
            }
        }
Пример #3
0
        /// <summary>
        /// 删除某种设置战斗状态的buff
        /// </summary>
        public void DelBattleStatus(string status)
        {
            BattleStatusType battle_status = Buff.GetBattleState(status);

            foreach (Buff buff in mBuffMap.Values)
            {
                if (!buff.NeedDel && buff.OwnBuffInfo.battle_effect_type == battle_status)
                {
                    buff.Delete();
                }
            }

            DestroyInvalid();
        }
Пример #4
0
 /// <summary> 数値系の修正入り最終数値を取得する </summary>
 /// <param name="type">種類</param>
 /// <returns>最終数値</returns>
 public virtual int GetBattleStatus(BattleStatusType type)
 {
     if (CorBattleStatus[CorType.Replace].Any(t => t.Type == type))
     {
         var last = CorBattleStatus[CorType.Replace].Last(t => t.Type == type);
         if (last.Check(this))
         {
             return(last.Correct(this));
         }
     }
     return(GetBaseBattleStatus(type)
            + CorBattleStatus[CorType.AddSub].Where(t => t.Type == type && t.Check(this))
            .Select(t => t.Correct(this)).Sum());
 }
Пример #5
0
        /// <summary> 数値系の基礎数値を取得する関数 </summary>
        /// <param name="type">種類</param>
        /// <returns>基礎数値</returns>
        protected override int GetBaseBattleStatus(BattleStatusType type)
        {
            if (CorBattleStatus[CorType.ChangeOriginal].Any(t => t.Type == type))
            {
                var last = CorBattleStatus[CorType.Replace].Last(t => t.Type == type);
                if (last.Check(this))
                {
                    return(last.Correct(this));
                }
            }
            switch (type)
            {
            case BattleStatusType.STRBase:
                return(BattleStatus[BattleStatusType.STR] * 3);

            case BattleStatusType.DEXBase:
                return(BattleStatus[BattleStatusType.DEX] * 3);

            case BattleStatusType.POWBase:
                return(BattleStatus[BattleStatusType.POW] * 3);

            case BattleStatusType.INTBase:
                return(BattleStatus[BattleStatusType.INT] * 3);

            case BattleStatusType.STR:
            case BattleStatusType.DEX:
            case BattleStatusType.POW:
            case BattleStatusType.INT:
            case BattleStatusType.MaxHP:
            case BattleStatusType.StartFate:
            case BattleStatusType.PhyDefense:
            case BattleStatusType.MagDefense:
            case BattleStatusType.Behavior:
            case BattleStatusType.MovePoint:
            case BattleStatusType.IdentificationDifficulty:
            case BattleStatusType.HateRate:
                return(BattleStatus[type]);

            case BattleStatusType.Attack:
            case BattleStatusType.Magic:
            case BattleStatusType.Recovary:
                return(0);

            default:
                break;
            }

            throw new NotImplementedException();
        }
Пример #6
0
    public DBBuffInfo GetBuffInfo(uint uiID)
    {
        DBBuffInfo info = null;

        if (mBuffInfos.TryGetValue(uiID, out info))
        {
            return(info);
        }

        string query_str = string.Format("SELECT * FROM {0} WHERE {1}=\"{2}\"", mTableName, "id", uiID);
        var    reader    = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, mTableName, query_str);

        if (reader == null)
        {
            mBuffInfos[uiID] = null;
            return(null);
        }

        if (!reader.HasRows || !reader.Read())
        {
            mBuffInfos[uiID] = null;
            reader.Close();
            reader.Dispose();
            return(null);
        }

        var buff_info = new Buff.BuffInfo();

        buff_info.buff_id     = DBTextResource.ParseUI(GetReaderString(reader, "id"));
        buff_info.is_show_tip = DBTextResource.ParseUI(GetReaderString(reader, "is_show_tip")) == 1;
        buff_info.max_add_num = DBTextResource.ParseUS(GetReaderString(reader, "max_layer"));
        buff_info.add_eff     = DBTextResource.ParseArrayUint(GetReaderString(reader, "add_eff"), ",");
        buff_info.delay_time  = DBTextResource.ParseUI_s(GetReaderString(reader, "delay_time"), 0) * 0.001f;
        buff_info.shape_shift = DBTextResource.ParseUI_s(GetReaderString(reader, "transform"), 0);
        buff_info.shift_state = DBTextResource.ParseBT_s(GetReaderString(reader, "shift_state"), 0);
        buff_info.life_time   = 3.0f;//buff的时间由服务端发送下来

        buff_info.name           = GetReaderString(reader, "name");
        buff_info.icon           = GetReaderString(reader, "icon");
        buff_info.effect_file    = GetReaderString(reader, "effect_file");
        buff_info.priority       = DBTextResource.ParseUS_s(GetReaderString(reader, "priority"), 0);
        buff_info.force_show     = DBTextResource.ParseUS_s(GetReaderString(reader, "force_show"), 0) == 1;
        buff_info.other_hide     = DBTextResource.ParseUS_s(GetReaderString(reader, "other_hide"), 0) == 1;
        buff_info.bind_pos       = (BindPos)DBTextResource.ParseUI(GetReaderString(reader, "bind_pos"));
        buff_info.follow_target  = DBTextResource.ParseUI_s(GetReaderString(reader, "follow_target"), 1) == 1;
        buff_info.scale          = DBTextResource.ParseF_s(GetReaderString(reader, "scale"), 1.0f);
        buff_info.auto_scale     = DBTextResource.ParseUS_s(GetReaderString(reader, "auto_scale"), 0) == 1;
        buff_info.des            = GetReaderString(reader, "des");
        buff_info.hide_countDown = DBTextResource.ParseUS_s(GetReaderString(reader, "hide_countDown"), 0) == 1;
        var max_count = GetReaderString(reader, "max_count");

        if (string.IsNullOrEmpty(max_count))
        {
            buff_info.max_count = 5;
        }
        else
        {
            buff_info.max_count = DBTextResource.ParseI_s(max_count, 5);
        }
        string           status      = GetReaderString(reader, "status");// buff的特殊状态
        BattleStatusType status_type = Buff.GetBattleState(status);

        if (status_type != BattleStatusType.BATTLE_STATUS_TYPE_INVALID)
        {
            buff_info.battle_effect_type = status_type;
            Bind(buff_info, BuffEffect.BattleStateChangeBegin, BuffEffect.BattleStateChangeEnd, null);
        }

        if (buff_info.shape_shift != 0)
        {
            Bind(buff_info, BuffEffect.ShapeShiftBegin, BuffEffect.ShapeShiftEnd, null);
        }

        // 设置周期更新时间
        buff_info.period_time = Mathf.Infinity;

        buff_info.buff_flags |= (ushort)Buff.BuffFlags.AF_RECOVERY_AFTER_DIE;

        mBuffInfos.Add(buff_info.buff_id, buff_info);

        reader.Close();
        reader.Dispose();

        return(buff_info);
    }
Пример #7
0
 /// <summary> 数値系の基礎数値を取得する関数 </summary>
 /// <param name="type">種類</param>
 /// <returns>基礎数値</returns>
 protected abstract int GetBaseBattleStatus(BattleStatusType type);
Пример #8
0
 /// <summary>
 /// 是否具备某种战斗状态
 /// </summary>
 public bool HasBattleState(BattleStatusType type)
 {
     return(FlagOperate.HasFlag(mCurBattleState, (int)type));
 }