Пример #1
0
        private CardDB()
        {
            CardList.Clear();
            cardidToCardList.Clear();

            //placeholdercard
            Card plchldr = new Card {
                name = CardName.unknown, cost = 1000
            };

            namelist.Add("unknown");
            CardList.Add(plchldr);
            unknownCard = CardList[0];

            string name  = "";
            var    cards = Cards.All;

            foreach (var item in cards.Keys)
            {
                var card = new Card();
                allCardIDS.Add(item);
                card.cardIDenum = ConvertHelper.cardIdstringToEnum(item);
                var dbCard = cards[item];
                card.EnglishName  = dbCard.GetLocName(Locale.enUS);
                card.ChineseName  = dbCard.GetLocName(Locale.zhCN);
                card.Health       = dbCard.Health;
                card.Class        = (int)dbCard.Class;
                card.Attack.Value = dbCard.Attack;
                card.race         = (int)dbCard.Race;
                card.rarity       = (int)dbCard.Rarity;
                card.cost         = dbCard.Cost;
                card.type         = (CardType)dbCard.Type;
                card.DbfId        = dbCard.DbfId;
                if (card.type == CardType.Token)
                {
                    card.isToken = true;
                }
                if (card.type == CardType.ENCHANTMENT)
                {
                    continue;
                }

                var trimmedCardName = TrimHelper.TrimEnglishName(dbCard.Name);
                if (!string.IsNullOrWhiteSpace(name))
                {
                    namelist.Add(trimmedCardName);
                }
                card.name = ConvertHelper.cardNamestringToEnum(trimmedCardName);

                card.poisonous          = dbCard.Entity.GetTag(GameTag.POISONOUS) == 1;
                card.Enrage             = dbCard.Entity.GetTag(GameTag.ENRAGED) == 1;
                card.Aura               = dbCard.Entity.GetTag(GameTag.AURA) == 1;
                card.tank               = dbCard.Entity.GetTag(GameTag.TAUNT) == 1;
                card.battlecry          = dbCard.Entity.GetTag(GameTag.BATTLECRY) == 1;
                card.discover           = dbCard.Entity.GetTag(GameTag.DISCOVER) == 1;
                card.windfury           = dbCard.Entity.GetTag(GameTag.WINDFURY) == 1;
                card.deathrattle        = dbCard.Entity.GetTag(GameTag.DEATHRATTLE) == 1;
                card.Reborn             = dbCard.Entity.GetTag(GameTag.REBORN) == 1;
                card.Inspire            = dbCard.Entity.GetTag(GameTag.INSPIRE) == 1;
                card.Durability         = dbCard.Entity.GetTag(GameTag.DURABILITY);
                card.Elite              = dbCard.Entity.GetTag(GameTag.ELITE) == 1;
                card.Combo              = dbCard.Entity.GetTag(GameTag.COMBO) == 1;
                card.oneTurnEffect      = dbCard.Entity.GetTag(GameTag.TAG_ONE_TURN_EFFECT) == 1;
                card.overload           = dbCard.Entity.GetTag(GameTag.OVERLOAD);
                card.lifesteal          = dbCard.Entity.GetTag(GameTag.LIFESTEAL) == 1;
                card.untouchable        = dbCard.Entity.GetTag(GameTag.UNTOUCHABLE) == 1;
                card.Stealth            = dbCard.Entity.GetTag(GameTag.STEALTH) == 1;
                card.Secret             = dbCard.Entity.GetTag(GameTag.SECRET) == 1;
                card.Quest              = dbCard.Entity.GetTag(GameTag.QUEST) == 1;
                card.Freeze             = dbCard.Entity.GetTag(GameTag.FREEZE) == 1;
                card.AdjacentBuff       = dbCard.Entity.GetTag(GameTag.ADJACENT_BUFF) == 1;
                card.DivineShield       = dbCard.Entity.GetTag(GameTag.DIVINE_SHIELD) == 1;
                card.Charge             = dbCard.Entity.GetTag(GameTag.CHARGE) == 1;
                card.Rush.Value         = dbCard.Entity.GetTag(GameTag.RUSH) == 1;
                card.Silence            = dbCard.Entity.GetTag(GameTag.SILENCE) == 1;
                card.Morph              = dbCard.Entity.GetTag(GameTag.MORPH) == 1;
                card.Spellpower         = dbCard.Entity.GetTag(GameTag.SPELLPOWER) > 0;
                card.spellpowervalue    = dbCard.Entity.GetTag(GameTag.SPELLPOWER);
                card.TwinSpell          = dbCard.Entity.GetTag(GameTag.TWINSPELL) == 1;
                card.TwinSpellCopyDbfId = dbCard.Entity.GetTag(GameTag.TWINSPELL);
                if (!string.IsNullOrEmpty(dbCard.Text))
                {
                    if (dbCard.Text.ToLower().Contains("choose one"))
                    {
                        card.choice = true;
                    }
                }

                var playRequirements = dbCard.Entity.GetPlayRequirements();
                if (playRequirements != null)
                {
                    foreach (var playRequirement in playRequirements)
                    {
                        var reqId     = Convert.ToInt32(playRequirement.ReqId);
                        var errorType = (ErrorType)Enum.ToObject(typeof(ErrorType), reqId);
                        card.playrequires.Add(errorType);
                    }
                }

                if (card.name != CardName.unknown)
                {
                    CardList.Add(card);
                    if (!cardidToCardList.ContainsKey(card.cardIDenum))
                    {
                        cardidToCardList.Add(card.cardIDenum, card);
                    }
                    else
                    {
                        Logger.GetLoggerInstanceForType()
                        .ErrorFormat("[c.cardIDenum:" + card.cardIDenum + "] already exists in cardidToCardList");
                    }
                }
            }

            teacherminion = getCardDataFromID(CardIdEnum.NEW1_026t);
            illidanminion = getCardDataFromID(CardIdEnum.EX1_614t);
            lepergnome    = getCardDataFromID(CardIdEnum.EX1_029);
            burlyrockjaw  = getCardDataFromID(CardIdEnum.GVG_068);

            Helpfunctions.Instance.InfoLog("CardList:" + cardidToCardList.Count);
        }
Пример #2
0
        public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (sp_buffer != null && (sp_buffer.Length >= sp_buffer_len || !sp_buffer.StartsWith("AA")))  //清理漏洞数据
            {
                sp_buffer = null;
            }
            else if (sp_buffer != null && !sp_buffer.StartsWith("AAAA") && sp_buffer.Length > 2)
            {
                sp_buffer = null;
            }
            byte[] readBuffer = new byte[sp_read_len];
            sp.Read(readBuffer, 0, readBuffer.Length);
            string readstr = HexHelper.ToHexString(readBuffer);

            readstr = TrimHelper.Trim(readstr, '0');
            showDispatchText("info.原始指令: " + readstr);
            if (!CheckCRC(readstr))
            {
                bool   cangoon = false;
                string newstr  = readstr.Substring(0, readstr.Length);

                for (int i = 0; i < newstr.Length; i += 2)
                {
                    char a = newstr[i];
                    char b = newstr[i + 1];
                    if (a != '0' || b != '0')
                    {
                        string wd = string.Concat(a, b);
                        if (sp_buffer != null && sp_buffer.StartsWith(sp_start_buf))
                        {
                            if (sp_buffer.StartsWith(sp_start_buf + sp_start_buf))
                            {
                                sp_buffer += wd;
                            }
                            else if (wd == sp_start_buf)
                            {
                                sp_buffer += wd;
                            }
                            else
                            {
                                sp_buffer = null;
                            }
                        }
                        else if (wd == sp_start_buf)
                        {
                            sp_buffer = wd;
                        }
                        if (!string.IsNullOrEmpty(sp_buffer))
                        {
                            if (CheckCRC(sp_buffer))
                            {
                                cangoon   = true;
                                readstr   = sp_buffer;
                                sp_buffer = null;
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                if (!cangoon)
                {
                    showDispatchText("error:反馈指令错误..." + readstr);
                    return;
                }
            }

            TruckLogInfo log = new TruckLogInfo()
            {
                Createtime = DateTime.Now,
                FullCode   = readstr
            };
            List <string> list = InstructionHelper.getFromInstuct(readstr);

            log.Routecode = list[4];    //路径点
            log.RunStatus = list[3];    //运行状态
            log.Truckcode = list[2];    //叉车编号
            bool needlog = false;

            #region 重复处理
            string cacheKey = "listen_route_key" + log.FullCode;
            object obj      = CacheManager.Instance.Get(cacheKey);
            if (obj != null)
            {
                List <TruckLogInfo> tList = obj as List <TruckLogInfo>;
                var item = tList.Where(a => a.FullCode == readstr).LastOrDefault();
                if (item == null)
                {
                    needlog = true;
                }
            }
            else
            {
                List <TruckLogInfo> tList = new List <TruckLogInfo>();
                tList.Add(log);
                CacheManager.Instance.Set(cacheKey, tList, 0, 15);
                needlog = true;
            }
            #endregion
            if (routeShow != null && routeShow.IsVisible)
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    routeShow.ShowTruckPosition(log.Routecode);
                }));
            }
            if (needlog)
            {
                x_tlService.Insert(log);
                if (log.RunStatus != "AA")  //叉车接收到启动指令后的返回消息
                {
                    //将叉车更新为运行状态
                    x_tkService.Update(() => new TruckInfo()
                    {
                        Truckstatus = 1, TruckrouteCode = log.Routecode
                    }, a => a.Truckcode == log.Truckcode);
                }
                else
                {
                    int status = 1;
                    if (log.RunStatus == "02") //停止指令
                    {
                        status = 0;            //叉车已停止运行,恢复为可用状态(暂定)
                    }
                    x_tkService.Update(() => new TruckInfo()
                    {
                        Truckstatus = status, TruckrouteCode = log.Routecode
                    }, a => a.Truckcode == log.Truckcode);
                }
            }
            if (log.RunStatus == "AA")  //叉车接收到启动指令后的返回消息
            {
                showDispatchText("start.叉车已启动:" + readstr);
            }
            else
            {
                if (log.RunStatus == "01")
                {
                    showDispatchText("runing.叉车运行到:" + readstr);
                }
                else
                {
                    showDispatchText("stop.叉车已停止运行:" + readstr);
                }
            }
        }