Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- // ^-ignore\\s+(.+)
- // ^-ignore\\s*$
- cmatch reg_matches;
- /**
- * Массивы регулярок
- * reg1 заменяется на reg2
- */
- const char *reg1[] = { "\\?", "\\/", "\\*", "\\-", "\\+", "\\\\", "\\.", "\\^", "\\)", "\\(", "\\}", "\\{", "\\]", "\\[", "\\$", "\\%", "\\@" };
- const char *reg2[] = { "\\\?", "\\\/", "\\\*", "\\\-", "\\\+", "\\\\", "\\\.", "\\\^", "\\\)", "\\\(", "\\\}", "\\\{", "\\\]", "\\\[", "\\\$", "\\\%", "\\\@" };
- /**
- * Функция для проверки текста по регулярным вырожениям (не учитывая регистр)
- */
- bool cChat::rgx(char *msg, char *reg)
- {
- regex pattern(reg, regex_constants::icase);
- if (regex_match(msg, pattern)) {
- if (regex_search(msg, reg_matches, pattern)) {
- return true;
- }
- }
- return false;
- }
- /**
- * Функция удаляет из текста все цвета (дважды) и пробелы
- */
- void cChat::clearColor(char *name)
- {
- name = (char*)regex_replace(name, (regex)"\\^\\d", "").c_str();
- name = (char*)regex_replace(name, (regex)"\\^\\d", "").c_str();
- name = (char*)regex_replace(name, (regex)" ", "").c_str();
- name = (char*)regex_replace(name, (regex)reg1[0], reg2[0]).c_str();
- for (int i = 1; i < 17; i++) { // 17 - кол-во регулярных вырожений в массиве
- name = (char*)regex_replace(name, (regex)reg1[i], reg2[i]).c_str();
- }
- }
- /**
- * Функция ищет игрока и возвращает его id
- * Если совпадений нет, то возвращается -1
- * Если совпадений больше 1, то возвращается 65
- */
- int cChat::getId(char *name)
- {
- int count = 0, // Кол-во совпадений
- id = -1; // id игрока
- clearColor(name);
- for (int i = 0; i < 64; i++) { // 64 - макс. кол-во игроков
- clientInfo_t *client = &ci[i];
- char *name_client = client->name;
- if (strlen(name_client) == 0) { // Если слот пустой, то пропускаем его
- continue;
- }
- clearColor(name_client);
- if (rgx(name_client, name)) {
- id = client->clientNum;
- count++;
- }
- }
- print::Saybold(name);
- if (count == 0) {
- return -1;
- }
- else if (count == 1) {
- return id;
- }
- else {
- return 65;
- }
- }
- /**
- * Функция обработки сообщений
- */
- void cChat::Responses(char *name, char *msg)
- {
- logging.Text(name, msg);
- // Если няня "занята", то ничего не делать
- if (!getMsg) {
- return;
- }
- // -time
- if (rgx(msg, "^-time\\s*$")) {
- Thread(Time);
- }
- // -id (search_string)
- else if (rgx(msg, "^-id\\s+(.+)")) {
- id((char*)reg_matches[0].str().c_str());
- }
- else if (rgx(msg, "^-id\\s*$")) {
- id(name);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement