/// <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); } }
/// <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); } }
/// <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(); }
/// <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()); }
/// <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(); }
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); }
/// <summary> 数値系の基礎数値を取得する関数 </summary> /// <param name="type">種類</param> /// <returns>基礎数値</returns> protected abstract int GetBaseBattleStatus(BattleStatusType type);
/// <summary> /// 是否具备某种战斗状态 /// </summary> public bool HasBattleState(BattleStatusType type) { return(FlagOperate.HasFlag(mCurBattleState, (int)type)); }