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); }
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); } } }