public HtmlTable(string htmlStr) { _htmlStr = htmlStr.Replace("\r", "").Replace("\n", ""); StringFinder sf = new StringFinder(_htmlStr); if (sf.FindNext("<thead") != -1) { TableHead = new TableHead(); sf.FindNext("</thead>", false); string ori = sf.Cut(); SetRows(TableHead, ori, "tr"); } if (sf.FindNext("<tbody") != -1) { TableBody = new TableBody(); sf.FindNext("</tbody>"); string ori = sf.Cut(); SetRows(TableBody, ori, "tr"); } if (sf.FindNext("<tfoot") != -1) { TableFoot = new TableFoot(); sf.FindNext("</tfoot>"); string ori = sf.Cut(); SetRows(TableFoot, ori, "tr"); } }
private static void CCKillAll(ConCommandArgs args) { TeamIndex team; if (args.Count == 0) { team = TeamIndex.Monster; } else { team = StringFinder.GetEnumFromPartial <TeamIndex>(args[0]); } int count = 0; foreach (CharacterMaster cm in UnityEngine.Object.FindObjectsOfType <CharacterMaster>()) { if (cm.teamIndex == team) { CharacterBody cb = cm.GetBody(); if (cb) { if (cb.healthComponent) { cb.healthComponent.Suicide(null); count++; } } } } Log.MessageNetworked("Killed " + count + " of team " + team + ".", args); }
private static string TrimHtml(string ok, string mark) { StringFinder sf = new StringFinder(ok); sf.FindNext($"<{mark}"); sf.FindNext(">", false); sf.FindNext($"</{mark}>"); return(sf.Cut()); }
public void StrFind_TooShort() { Given_Image(0x23, 0); mr.ReplayAll(); var sf = new StringFinder(program); Assert.AreEqual(0, sf.FindStrings(StringType.NullTerminated(PrimitiveType.Char), 5).Count()); }
public void StrFind_SingleMatch() { Given_Image(0x41, 0); mr.ReplayAll(); var sf = new StringFinder(program); var hits = sf.FindStrings(StringType.NullTerminated(PrimitiveType.Char), 1).ToArray(); Assert.AreEqual(1, hits.Length); Assert.AreEqual(Address.Ptr32(0x00400000), hits[0].Address); }
private static void CCNextBoss(ConCommandArgs args) { //Log.MessageNetworked("This feature is currently not working. We'll hopefully provide an update to this soon.", args); //return; Log.MessageNetworked(Lang.PARTIALIMPLEMENTATION_WARNING, args, LogLevel.MessageClientOnly); if (args.Count == 0) { Log.MessageNetworked(Lang.NEXTBOSS_ARGS, args); } StringBuilder s = new StringBuilder(); if (args.Count >= 1) { try { nextBoss = StringFinder.Instance.GetDirectorCardFromPartial(args[0]); s.AppendLine($"Next boss is: {nextBoss.spawnCard.name}. "); if (args.Count >= 2) { if (!int.TryParse(args[1], out nextBossCount)) { Log.MessageNetworked(Lang.COUNTISNUMERIC, args, LogLevel.MessageClientOnly); nextBossCount = 1; } else { if (nextBossCount > 6) { nextBossCount = 6; } else if (nextBossCount <= 0) { nextBossCount = 1; } s.Append($"Count: {nextBossCount}. "); if (args.Count >= 3) { nextBossElite = StringFinder.GetEnumFromPartial <EliteIndex>(args[2]); s.Append("Elite: " + nextBossElite.ToString()); } } } On.RoR2.CombatDirector.SetNextSpawnAsBoss += Hooks.CombatDirector_SetNextSpawnAsBoss; Log.MessageNetworked(s.ToString(), args); } catch (Exception ex) { Log.MessageNetworked(Lang.OBJECT_NOTFOUND + args[0], args, LogLevel.ErrorClientOnly); Log.MessageNetworked(ex.ToString(), args, LogLevel.ErrorClientOnly); } } }
public void StrFind_TooShort() { Given_Image(0x23, 0); var sf = new StringFinder(program); Assert.AreEqual(0, sf.FindStrings(new StringFinderCriteria { StringType = StringType.NullTerminated(PrimitiveType.Char), MinimumLength = 5, CreateReader = (m, a, b) => new LeImageReader(m, a, b) }).Count()); }
static void Main(string[] args) { string path = "E:\\watch"; StringFinder find = new StringFinder(); find.Found += FinderPrint; Console.Write($"Введите строку для поиска (в {path}): "); string line = Console.ReadLine(); Console.WriteLine($"Поиск {line} в {path}"); find.Start(path, line); Console.ReadLine(); }
private void SetRows(TableElement tableElement, string ori, string key) { StringFinder sf = new StringFinder(ori); while (sf.FindNext($"<{key}") != -1) { sf.FindNext($"</{key}>", false); string oriRow = sf.Cut(); var list = GetColList(oriRow, "th", "td"); tableElement.Rows.AddRow(list); } }
private static void CCListBody(ConCommandArgs _) { string langInvar; int i = 0; StringBuilder sb = new StringBuilder(); foreach (var body in BodyCatalog.allBodyPrefabBodyBodyComponents) { langInvar = StringFinder.GetLangInvar(body.baseNameToken); sb.AppendLine($"[{i}]{body.name}={langInvar}"); i++; } Log.Message(sb); }
private static void CCListAI(ConCommandArgs _) { string langInvar; int i = 0; StringBuilder sb = new StringBuilder(); foreach (var master in MasterCatalog.allAiMasters) { langInvar = StringFinder.GetLangInvar(master.bodyPrefab.GetComponent <CharacterBody>().baseNameToken); sb.AppendLine($"[{i}]{master.name}={langInvar}"); i++; } Log.Message(sb); }
public void StrFind_SingleMatch() { Given_Image(0x41, 0); var sf = new StringFinder(program); var hits = sf.FindStrings(new StringFinderCriteria { StringType = StringType.NullTerminated(PrimitiveType.Char), MinimumLength = 1, CreateReader = (m, a, b) => new LeImageReader(m, a, b) }).ToArray(); Assert.AreEqual(1, hits.Length); Assert.AreEqual(Address.Ptr32(0x00400000), hits[0].Address); }
public void StrFind_FindUtf16Le() { Given_Image(Encoding.GetEncoding("utf-16le").GetBytes("\0\0Hello\0")); var sf = new StringFinder(program); var hits = sf.FindStrings(new StringFinderCriteria { StringType = StringType.NullTerminated(PrimitiveType.UInt16), MinimumLength = 3, CreateReader = (m, a, b) => new LeImageReader(m, a, b) }).ToArray(); Assert.AreEqual(1, hits.Length); Assert.AreEqual(Address.Ptr32(0x00400004), hits[0].Address); Assert.AreEqual(10, hits[0].Length); }
/// <summary> /// 将消息中出现的图片类型CQ码转换为可读形式。 /// </summary> /// <param name="source"></param> /// <returns></returns> private static string DecodeBFaceToText(string source) { StringBuilder sb = new StringBuilder(source); StringFinder sf = new StringFinder(source); const string str1 = "[CQ:bface,"; while (sf.FindNext(str1) != -1) { sf.FindNext("]", false); sb.Remove(sf.StartIndex, sf.Length); sb.Insert(sf.StartIndex, "[大表情]"); sf = new StringFinder(sb.ToString()); } return(sb.ToString()); }
/// <summary> /// 将消息中出现的图片类型CQ码转换为可读形式。 /// </summary> /// <param name="source"></param> /// <returns></returns> private static string DecodeAtToText(string source) { StringBuilder sb = new StringBuilder(source); StringFinder sf = new StringFinder(source); const string str1 = "[CQ:at,"; while (sf.FindNext(str1) != -1) { sf.FindNext("]", false); string qq = GetAt(sf.Cut())[0]; sb.Remove(sf.StartIndex, sf.Length); sb.Insert(sf.StartIndex, $"@{qq} "); sf = new StringFinder(sb.ToString()); } return(sb.ToString()); }
private static void CCChangeTeam(ConCommandArgs args) { if (args.Count == 0) { Log.MessageNetworked(Lang.CHANGETEAM_ARGS, args, LogLevel.MessageClientOnly); return; } if (args.sender == null && args.Count < 2) { Log.Message(Lang.DS_REQUIREFULLQUALIFY, LogLevel.Error); return; } CharacterMaster master = args.sender?.master; if (args.Count > 1) { NetworkUser player = Util.GetNetUserFromString(args.userArgs, 1); if (player != null) { master = player.master; } else { Log.MessageNetworked(Lang.PLAYER_NOTFOUND, args, LogLevel.MessageClientOnly); return; } } if (Enum.TryParse(StringFinder.GetEnumFromPartial <TeamIndex>(args[0]).ToString(), true, out TeamIndex teamIndex)) { if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count) { if (master.GetBody()) { master.GetBody().teamComponent.teamIndex = teamIndex; master.teamIndex = teamIndex; Log.MessageNetworked("Changed to team " + teamIndex, args); return; } } } //Note the `return` on succesful evaluation. Log.MessageNetworked("Invalid team. Please use 0,'neutral',1,'player',2, or 'monster'", args, LogLevel.MessageClientOnly); }
private static IEnumerable <string> GetColList(string ori, params string[] mark) { List <string> param = new List <string>(); foreach (var item in mark) { StringFinder sf = new StringFinder(ori); while (sf.FindNext($"<{item}") != -1) { sf.FindNext($"</{item}>", false); string ok = sf.Cut(); string trimed = TrimHtml(ok, item); param.Add(trimed); } } return(param); }
public static void Main(string[] args) { // If you have to remember *one* thing from this tutorial, it is the three essential players // 1- the tunable parameters of the optimisation problem: // ISystemConfiguration, here implemented by StringSpecification for this 'Hello World' problem // 2- the object evaluating the score(s) for a given "system configuration" (IObjectiveEvaluator<T>) // 3- the optimisation algorithm, implementing IEvolutionEngine<T> // It is recommended that you declare variables typed as interfaces, not concrete classes, // whenever possible including in an 'Hello World'... IObjectiveEvaluator <StringSpecification> evaluator; IEvolutionEngine <StringSpecification> finder; string strToFind = args.Length == 0 ? "Hello, World!" : args[0]; evaluator = buildEvaluator(strToFind); finder = new StringFinder(evaluator, strToFind.Length, new BasicRngFactory(0)); var result = finder.Evolve(); Console.WriteLine(MetaheuristicsHelper.GetHumanReadable(result)); }
public static void Query() { while (MessageQueue.Count != 0) { if (!MessageQueue.TryDequeue(out var routeMsg)) continue; var cmd = routeMsg.CommandName; const long cabbageId = 1335734629; string uname; if (cmd == "statme" || cmd == "bpme" || cmd == "mybp" || cmd == "costme" || cmd == "mycost") { BllUserRole bllUserRole = new BllUserRole(); List<TableUserRole> userInfo = bllUserRole.GetUserRoleByQq(long.Parse(routeMsg.UserId)); if (userInfo.Count == 0) DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(DefaultReply.IdNotBound, true)); uname = userInfo[0].CurrentUname; } else uname = routeMsg.ArgString; using (Session session = new Session(25000, new CoolQIdentity(cabbageId, MessageType.Private), cabbageId)) { DaylilyCore.Current.MessageDispatcher?.SendMessageAsync( new CoolQRouteMessage($"!{cmd.Replace("my", "").Replace("me", "")} {uname}", new CoolQIdentity(cabbageId, MessageType.Private))); try { CoolQRouteMessage result = (CoolQRouteMessage)session.GetMessage(); session.Timeout = 600; CoolQRouteMessage result2 = null; try { result2 = (CoolQRouteMessage)session.GetMessage(); } catch { // ignored } ImageInfo[] imgList = CoolQCode.GetImageInfo(result.RawMessage) ?? CoolQCode.GetImageInfo(result2?.RawMessage); if (imgList == null) { DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(result.RawMessage)); if (result2 != null) DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(result2.RawMessage)); continue; } //throw new IndexOutOfRangeException("查询失败:" + result.Message); var message = CoolQCode.DecodeToString(result.RawMessage); foreach (var item in imgList) { var str = new FileImage(new Uri(item.Url)); StringFinder sf = new StringFinder(message); sf.FindNext("[图片]"); string str1 = sf.Cut(); if (sf.FindNext("[图片]", false) > message.Length - 1) { message = str1 + str; continue; } sf.FindToLast(); string str2 = sf.Cut(); message = str1 + str + str2; } DaylilyCore.Current.MessageDispatcher?.SendMessageAsync( routeMsg.ToSource(message + "\r\n(查询由白菜支持)")); } catch (IndexOutOfRangeException e) { string msg = e.Message; DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(msg, true)); } catch (TimeoutException) { string msg = "查询失败,白菜没有搭理人家.."; DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(msg, true)); } catch (Exception ex) { string msg = "查询失败,未知错误。"; Logger.Exception(ex); DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg.ToSource(msg, true)); } // catch } // using } // while }
public override CommonMessageResponse Message_Received(CommonMessage messageObj) { string userName, userId; if (OsuId == null) { BllUserRole bllUserRole = new BllUserRole(); List <TblUserRole> userInfo = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId)); if (userInfo.Count == 0) { return(new CommonMessageResponse(LoliReply.IdNotBound, messageObj, true)); } userId = userInfo[0].UserId.ToString(); userName = userInfo[0].CurrentUname; } else { int userNum = OldSiteApi.GetUser(OsuId, out var userObj); if (userNum == 0) { return(new CommonMessageResponse(LoliReply.IdNotFound, messageObj, true)); } if (userNum > 1) { // ignored } userId = userObj.user_id; userName = userObj.username; } var jsonString = HttpClientUtil.HttpGet("https://syrin.me/pp+/u/" + userId); if (jsonString == null) { return(new CommonMessageResponse("PP+获取超时,请重试…", messageObj, true)); } StringFinder sf = new StringFinder(jsonString); sf.FindNext("<div class=\"performance-table\">", false); sf.FindNext("</div>"); string innerText = sf.Cut().Trim('\n').Trim('\r'); HtmlTable htmlTable = new HtmlTable(innerText); string[,] array = htmlTable.GetArray(); Dictionary <string, int> dValue = new Dictionary <string, int>(); for (var i = 0; i < array.GetLength(0); i++) { for (var j = 0; j < array.GetLength(1); j += 2) { string key = array[i, j].Trim(':').Replace("Aim (", "").Replace(")", ""); int value = int.Parse(array[i, j + 1].Replace(",", "").Trim('p')); dValue.Add(key, value); } } var cqImg = new FileImage(Draw(userName, dValue)).ToString(); return(new CommonMessageResponse(cqImg, messageObj)); }
private static void CCSpawnAI(ConCommandArgs args) { //- Spawns the specified CharacterMaster. Requires 1 argument: spawn_ai 0:{localised_objectname} 1:[Count:1] 2:[EliteIndex:-1/None] 3:[Braindead:0/false(0|1)] 4:[TeamIndex:0/Neutral] if (args.sender == null) { Log.Message(Lang.DS_NOTYETIMPLEMENTED, LogLevel.Error); return; } if (args.Count == 0) { Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly); return; } string character = StringFinder.Instance.GetMasterName(args[0]); if (character == null) { Log.MessageNetworked(Lang.SPAWN_ERROR + character, args, LogLevel.MessageClientOnly); return; } var masterprefab = MasterCatalog.FindMasterPrefab(character); var body = masterprefab.GetComponent <CharacterMaster>().bodyPrefab; int amount = 1; if (args.Count > 1) { if (int.TryParse(args[1], out amount) == false) { Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly); return; } } Vector3 location = args.sender.master.GetBody().transform.position; Log.MessageNetworked(string.Format(Lang.SPAWN_ATTEMPT_2, amount, character), args); for (int i = 0; i < amount; i++) { var bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterprefab, location, Quaternion.identity); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity); if (args.Count > 2) { var eliteIndex = StringFinder.GetEnumFromPartial <EliteIndex>(args[2]); if (eliteIndex != EliteIndex.None) { master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex); master.inventory.GiveItem(ItemIndex.BoostHp, Mathf.RoundToInt((GetTierDef(eliteIndex).healthBoostCoefficient - 1) * 10)); master.inventory.GiveItem(ItemIndex.BoostDamage, Mathf.RoundToInt((GetTierDef(eliteIndex).damageBoostCoefficient - 1) * 10)); } } if (args.Count > 3 && Util.TryParseBool(args[3], out bool braindead) && braindead) { UnityEngine.Object.Destroy(master.GetComponent <BaseAI>()); } TeamIndex teamIndex = TeamIndex.Monster; if (args.Count > 4) { StringFinder.TryGetEnumFromPartial(args[4], out teamIndex); } if (teamIndex >= TeamIndex.None && teamIndex < TeamIndex.Count) { master.teamIndex = teamIndex; master.GetBody().teamComponent.teamIndex = teamIndex; } } }
public static void Query() { while (MessageQueue.Count != 0) { if (!MessageQueue.TryDequeue(out var messageObj)) { continue; } var cmd = messageObj.Command; const long cabbageId = 1020640876; string uname; if (cmd == "statme" || cmd == "bpme" || cmd == "mybp" || cmd == "costme" || cmd == "mycost") { BllUserRole bllUserRole = new BllUserRole(); List <TblUserRole> userInfo = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId)); if (userInfo.Count == 0) { CoolQDispatcher.SendMessage(new CommonMessageResponse(LoliReply.IdNotBound, messageObj, true)); } uname = userInfo[0].CurrentUname; } else { uname = messageObj.ArgString; } using (Session session = new Session(25000, new Identity(cabbageId, MessageType.Private), cabbageId)) { CoolQDispatcher.SendMessage( new CommonMessageResponse($"!{cmd.Replace("my", "").Replace("me", "")} {uname}", new Identity(cabbageId, MessageType.Private))); try { CommonMessage result = session.GetMessage(); session.Timeout = 600; CommonMessage result2 = null; try { result2 = session.GetMessage(); } catch { // ignored } ImageInfo[] imgList = CqCode.GetImageInfo(result.Message) ?? CqCode.GetImageInfo(result2?.Message); if (imgList == null) { CoolQDispatcher.SendMessage(new CommonMessageResponse(result.Message, messageObj)); if (result2 != null) { CoolQDispatcher.SendMessage(new CommonMessageResponse(result2.Message, messageObj)); } continue; } //throw new IndexOutOfRangeException("查询失败:" + result.Message); var message = CqCode.DecodeToString(result.Message); foreach (var item in imgList) { var str = new FileImage(new Uri(item.Url)); StringFinder sf = new StringFinder(message); sf.FindNext("[图片]"); string str1 = sf.Cut(); if (sf.FindNext("[图片]", false) > message.Length - 1) { message = str1 + str; continue; } sf.FindToLast(); string str2 = sf.Cut(); message = str1 + str + str2; } CoolQDispatcher.SendMessage( new CommonMessageResponse(message + "\r\n(查询由白菜支持)", messageObj)); } catch (IndexOutOfRangeException e) { string msg = e.Message; CoolQDispatcher.SendMessage(new CommonMessageResponse(msg, messageObj, true)); } catch (TimeoutException) { string msg = "查询失败,白菜没有搭理人家.."; CoolQDispatcher.SendMessage(new CommonMessageResponse(msg, messageObj, true)); } catch (Exception ex) { string msg = "查询失败,未知错误。"; Logger.Exception(ex); CoolQDispatcher.SendMessage(new CommonMessageResponse(msg, messageObj, true)); } // catch } // using } // while } //void
public override CoolQRouteMessage OnMessageReceived(CoolQScopeEventArgs scope) { var routeMsg = scope.RouteMessage; string userName, userId; OldSiteApiClient client = new OldSiteApiClient(); if (UserName == null) { BllUserRole bllUserRole = new BllUserRole(); List <TableUserRole> userInfo = bllUserRole.GetUserRoleByQq(long.Parse(routeMsg.UserId)); if (userInfo.Count == 0) { return(routeMsg.ToSource(DefaultReply.IdNotBound, true)); } userId = userInfo[0].UserId.ToString(); userName = userInfo[0].CurrentUname; } else { int userNum = client.GetUser(UserComponent.FromUserName(UserName), out var userObj); if (userNum == 0) { return(routeMsg.ToSource(DefaultReply.IdNotFound, true)); } if (userNum > 1) { // ignored } userId = userObj.UserId.ToString(); userName = userObj.UserName; } var jsonString = HttpClient.HttpGet("https://syrin.me/pp+/u/" + userId); if (jsonString == null) { return(routeMsg .ToSource("PP+获取超时,请重试…", true) .ForceToSend()); } StringFinder sf = new StringFinder(jsonString); sf.FindNext("<div class=\"performance-table\">", false); sf.FindNext("</div>"); string innerText = sf.Cut().Trim('\n').Trim('\r'); HtmlTable htmlTable = new HtmlTable(innerText); string[,] array = htmlTable.GetArray(); Dictionary <string, int> dValue = new Dictionary <string, int>(); for (var i = 0; i < array.GetLength(0); i++) { for (var j = 0; j < array.GetLength(1); j += 2) { string key = array[i, j].Trim(':').Replace("Aim (", "").Replace(")", ""); int value = int.Parse(array[i, j + 1].Replace(",", "").Trim('p')); dValue.Add(key, value); } } var cqImg = new FileImage(Draw(userName, dValue)).ToString(); return(routeMsg .ToSource(cqImg) .ForceToSend()); }
private static void CCGetTeamIndexPartial(ConCommandArgs args) { //Alias.Instance.GetMasterName(args[0]); Log.Message(StringFinder.GetEnumFromPartial <TeamIndex>(args[0]).ToString()); }