public ActorAttribute GetGoodsShowAttr(uint gid)
        {
            ActorAttribute attr = null;

            if (mGoodsShowAttrsInfos.TryGetValue(gid, out attr))
            {
                return(attr);
            }

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

            if (table_reader == null)
            {
                mGoodsShowAttrsInfos[gid] = null;
                return(null);
            }

            if (!table_reader.HasRows)
            {
                mGoodsShowAttrsInfos[gid] = null;
                table_reader.Close();
                table_reader.Dispose();
                return(null);
            }

            if (!table_reader.Read())
            {
                mGoodsShowAttrsInfos[gid] = null;
                table_reader.Close();
                table_reader.Dispose();
                return(null);
            }

            attr = new ActorAttribute();
            string attrsStr = GetReaderString(table_reader, "attrs");

            attrsStr = attrsStr.Replace(" ", "");
            var matchs = Regex.Matches(attrsStr, @"\{(\d+),(\d+)\}");

            foreach (Match _match in matchs)
            {
                if (_match.Success)
                {
                    uint attrId    = (DBTextResource.ParseUI(_match.Groups[1].Value));
                    uint attrValue = DBTextResource.ParseUI(_match.Groups[2].Value);
                    attr.Add(attrId, attrValue);
                }
            }

            mGoodsShowAttrsInfos[gid] = attr;

            table_reader.Close();
            table_reader.Dispose();

            return(attr);
        }
Exemple #2
0
        /// <summary>
        /// 根据PkgKvMin列表生成ActorAttribute
        /// </summary>
        /// <param name="pkgKvMins"></param>
        /// <returns></returns>
        public static ActorAttribute ParseByPkgKvMins(List <Net.PkgKvMin> pkgKvMins)
        {
            ActorAttribute actorAttribute = new ActorAttribute();

            foreach (var attr in pkgKvMins)
            {
                actorAttribute.Add(attr.k, attr.v);
            }

            return(actorAttribute);
        }
Exemple #3
0
        public ActorAttribute Clone()
        {
            ActorAttribute attr = new ActorAttribute();

            foreach (var id in base.Keys)
            {
                attr.Add(id, this[id].Value);
            }

            return(attr);
        }
 void InitBaseAttr()
 {
     BasicAttrs = new ActorAttribute();
     if (DBSoul != null)
     {
         foreach (var kv in DBSoul.BasicAttrs)
         {
             BasicAttrs.Add(kv.Key, (long)kv.Value);
         }
     }
 }
Exemple #5
0
        /// <summary>
        /// 获取对应光武类型上镶嵌的兵魂的所有属性
        /// </summary>
        /// <param name="Pos_Type"></param>
        /// <returns></returns>
        public static ActorAttribute GetTotalAttrs(uint Pos_Type)
        {
            ActorAttribute TotalAttr = new ActorAttribute();

            if (ItemManager.Instance.InstalledLightWeaponSoul.ContainsKey(Pos_Type))
            {
                foreach (var Souls in ItemManager.Instance.InstalledLightWeaponSoul[Pos_Type])
                {
                    foreach (var basicAttr in Souls.Value.BasicAttrs)
                    {
                        TotalAttr.Add(basicAttr.Key, basicAttr.Value.Value);
                    }

                    foreach (var upgradeAttr in Souls.Value.UpgradeAttrs)
                    {
                        TotalAttr.Add(upgradeAttr.Key, upgradeAttr.Value.Value);
                    }
                }
            }
            return(TotalAttr);
        }
Exemple #6
0
        /// <summary>
        /// 获取法宝自身评分
        /// </summary>
        /// <param name="magicId"></param>
        public int GetMagicSelfScore(uint magicId)
        {
            var magicInfo = GetData(magicId);

            if (magicInfo == null)
            {
                return(0);
            }

            ActorAttribute attr = new ActorAttribute();

            foreach (var v in magicInfo.AssistAttrs)
            {
                attr.Add(v.attr_id, v.attr_num);
            }

            return(xc.Equip.EquipHelper.GetEquipBaseAttrScoreByType(AttrScoreGType.EquipBase, attr));
        }
Exemple #7
0
        private void SetAttribute(string key, ActorAttribute attr, bool isCur)
        {
            var info = DBSoulLv.Instance.GetData(key);

            if (info != null)
            {
                using (var iter = info.attr.GetEnumerator())
                {
                    while (iter.MoveNext())
                    {
                        var cur = iter.Current;
                        attr.Add(cur.Key, cur.Value);
                    }
                }

                if (isCur)
                {
                    UpLvNeedVal = info.cream;
                }
            }
        }
Exemple #8
0
        public ActorAttribute StrengthAttr(uint lv, uint equipPos)
        {
            string         key  = string.Format("{0}_{1}", lv, equipPos);
            ActorAttribute attr = null;

            if (mStrengthAttrs.TryGetValue(key, out attr) == true)
            {
                return(attr);
            }

            attr = new ActorAttribute();

            List <string> dbs = DBManager.Instance.QuerySqliteField <string>(GlobalConfig.DBFile, "data_strength_attr", "csv_id", key, "base_attr");

            if (dbs.Count == 0)
            {
                mStrengthAttrs.Add(key, attr);
                return(attr);
            }

            string raw = dbs[0];

            raw = raw.Replace(" ", "");
            var matchs = Regex.Matches(raw, @"\{(\d+),(\d+)\}");

            foreach (Match _match in matchs)
            {
                if (_match.Success)
                {
                    uint attrId    = (DBTextResource.ParseUI(_match.Groups[1].Value));
                    uint attrValue = DBTextResource.ParseUI(_match.Groups[2].Value);
                    attr.Add(attrId, attrValue);
                }
            }

            mStrengthAttrs.Add(key, attr);
            return(attr);
        }
        public void ProcessCharacterInfo(S2CPlayerSyncAttrs attrs)
        {
            // 有变化的属性
            ActorAttribute actorAttributeOffset = new ActorAttribute();

            actorAttributeOffset.Clear();

            // 同步服务端数据
            foreach (PkgAttrElm attrElm in attrs.attr_elm)
            {
                // 属性赋值
                IActorAttribute attr = null;
                if (LocalActorAttribute.Attribute.TryGetValue(attrElm.attr, out attr))
                {
                    if ((ushort)attrElm.attr != GameConst.AR_BAT_PW)
                    {
                        // 属性增加才显示
                        if (attrElm.value > attr.Value)
                        {
                            actorAttributeOffset.Add(attrElm.attr, attrElm.value - attr.Value);
                        }
                    }
                    attr.Value = attrElm.value;
                }
                else
                {
                    if ((ushort)attrElm.attr != GameConst.AR_BAT_PW)
                    {
                        actorAttributeOffset.Add(attrElm.attr, attrElm.value);
                    }
                    //包含其他字段赋值
                    LocalActorAttribute.Attribute.Add(attrElm.attr, attrElm.value);
                }

                if ((ushort)attrElm.attr == GameConst.AR_BAT_PW)//战斗力赋值
                {
                    long new_battlepower = attrElm.value;
                    long delta           = new_battlepower - mLastBattlePower;
                    if (new_battlepower != 0 && mLastBattlePower != 0)
                    {
                        //if (delta > 0)
                        if (delta != 0)
                        {
                            TryShowFightRankAnim(delta);
                        }
                    }

                    mLastBattlePower = new_battlepower;
                    LocalActorAttribute.BattlePower = new_battlepower;

                    if (delta != 0)
                    {
                        ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_LOCALPLAYER_BATTLE_POWER_CHANGED, null);
                    }
                }

                // 移动速度的同步需要特殊处理
                Actor actor = Game.GetInstance().GetLocalPlayer();
                if (null != actor)
                {
                    if ((ushort)attrElm.attr == GameConst.AR_SPEED || (ushort)attrElm.attr == GameConst.AR_SPEED_ADD)
                    {
                        actor.SetMoveSpeedScale(LocalActorAttribute.MoveSpeedScale * GlobalConst.AttrConvert, LocalActorAttribute.MoveSpeedAdd);
                    }
                }
            }

            if (mUpdateTipsShowLevelRange == null)
            {
                mUpdateTipsShowLevelRange = GameConstHelper.GetUintList("GAME_ATTR_UPDATE_TIPS_SHOW_LEVEL_RANGE");
            }
            if (mUpdateTipsShowReasons == null)
            {
                mUpdateTipsShowReasons = GameConstHelper.GetUintList("GAME_ATTR_UPDATE_TIPS_SHOW_REASONS");
            }
            bool meetShowReason = false;

            foreach (uint reason in mUpdateTipsShowReasons)
            {
                if (reason == attrs.reason)
                {
                    meetShowReason = true;
                }
            }
            if (meetShowReason == true && Level >= mUpdateTipsShowLevelRange[0] && Level <= mUpdateTipsShowLevelRange[1] && attrs.init != 1 && actorAttributeOffset.Count > 0)
            {
                // 属性变化界面的弹出,如果战力提升界面正在显示,则等该界面关闭后再弹出属性变化界面
                if (xc.ui.ugui.UIManager.Instance.GetExistingWindow("UIAttributeTipsWindow") != null)
                {
                    ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_SHOW_ATTRS_UPDATE_WINDOW, new CEventBaseArgs(actorAttributeOffset));
                }
                else
                {
                    xc.ui.ugui.UIManager.Instance.ShowWindow("UIAttributeTipsWindow", actorAttributeOffset);
                }
            }

            // 设置本地玩家的属性
            Actor local_player = Game.GetInstance().GetLocalPlayer();

            if (null != local_player)
            {
                bool need_update_hp = false;
                if (mLastHp != LocalActorAttribute.HP || mLastHpMax != LocalActorAttribute.HPMax)
                {
                    need_update_hp = true;
                    mLastHp        = LocalActorAttribute.HP;
                    mLastHpMax     = LocalActorAttribute.HPMax;
                }

                local_player.SetActorAttribute(LocalActorAttribute);

                ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_ACTOR_BASEINFO_UPDATE, new CEventActorArgs(local_player));

                if (need_update_hp)
                {
                    ClientEventMgr.GetInstance().FireEvent((int)ClientEvent.CE_LOCAL_PLAYER_NWAR_CHANGED, new CEventEventParamArgs("hp", LocalActorAttribute.HP));
                    local_player.CurLife  = local_player.CurLife;// 强制更新下当前血量, 发送相关的消息
                    local_player.FullLife = LocalActorAttribute.HPMax;
                }
            }
        }