private void UpdateCharDynamic(BattleResult battle, CharacterDynamic cd, string mapId, bool addExp = true)
        {
            cd.BattleTotalWait += battle.Wait;

            if (this._isDungeon)
            {
                cd.BattleDungeonTotalCount++;
                cd.BattleDungeonLevelTotalCount++;
                cd.BattleDungeonLevelTotalWait += battle.Wait;
            }
            else
            {
                cd.BattleTotalCount++;
                cd.BattleLevelTotalCount++;
                cd.BattleLevelTotalWait += battle.Wait;
            }

            if (addExp)
            {
                cd.BattleTotalExp += battle.DropExp;

                if (this.IsDungeon)
                {
                    cd.BattleDungeonLevelTotalExp += battle.DropExp;
                }
                else
                {
                    cd.BattleLevelTotalExp += battle.DropExp;
                }

                CharacterActivityCache.ClearCache(cd.CharId);

                if (battle.UpgradeLev == true)
                {
                    CharacterCache.ClearCache(cd.CharId);
                }
            }

            if (battle.Success == true)
            {
                if (this._isDungeon)
                {
                    cd.BattleDungeonWinCount++;
                    cd.BattleDungeonLevelWinCount++;
                }
                else
                {
                    cd.BattleWinCount++;
                    cd.BattleLevelWinCount++;
                }
            }

            if (battle.GameItemsList != null)
            {
                var allMaps = this._site.InitAllMaps();
                if (!string.IsNullOrEmpty(mapId))
                {
                    Map map = allMaps.FirstOrDefault(p => p.MapId == mapId);

                    foreach (var item in battle.GameItemsList)
                    {
                        MapItem mi = MapItem.FromItem(item);
                        cd.AppendItem(mapId, mi);

                        if (map != null)//&& !map.ItemsVoList.ContainsKey(mi.ItemId))
                        {
                            map.ItemsVoList[mi.ItemId] = mi;
                        }
                    }
                }
            }

            CharacterDynamicCache.SaveDynamic(cd);
        }