| 806 | } |
| 807 | |
| 808 | bool favcatcheckkey(serverinfo &si, const char *key) |
| 809 | { // IP:port, #gamemode ,%mapname, desc |
| 810 | string text, keyuc; |
| 811 | if(isdigit(*key)) // IP |
| 812 | { |
| 813 | formatstring(text)("%s:%d", si.name, si.port); |
| 814 | return !strncmp(text, key, strlen(key)); |
| 815 | } |
| 816 | else if(si.address.host != ENET_HOST_ANY && si.ping != 9999) switch(*key) |
| 817 | { |
| 818 | case '#': |
| 819 | return si.map[0] && si.mode == atoi(key + 1); |
| 820 | case '%': |
| 821 | strtoupper(text, si.map); |
| 822 | strtoupper(keyuc, key + 1); |
| 823 | return si.map[0] && key[1] && strstr(text, keyuc); |
| 824 | case '>': |
| 825 | return si.ping > atoi(key + 1); |
| 826 | case '!': |
| 827 | return !favcatcheckkey(si, key + 1); |
| 828 | case '+': |
| 829 | return si.map[0] && favcatcheckkey(si, key + 1); |
| 830 | case '$': |
| 831 | if(key[1]) |
| 832 | { |
| 833 | formatstring(text)("%s \"%s\" %d %d %d %d %d \"%s\" %d %d", key + 1, si.map, si.mode, si.ping, si.minremain, si.numplayers, si.maxclients, si.name, si.port, si.pongflags); |
| 834 | filtertext(text, text, FTXT_NOCOLOR|FTXT_NOWHITE|FTXT_ALLOWBLANKS); |
| 835 | int cnt = 0; |
| 836 | for(const char *p = text; (p = strchr(p, '\"')); p++) cnt++; |
| 837 | return cnt == 4 && execute(text); |
| 838 | } |
| 839 | break; |
| 840 | default: |
| 841 | filtertext(text, si.sdesc, FTXT_NOCOLOR|FTXT_NOWHITE|FTXT_ALLOWBLANKS|(showonlyfavourites > 0 ? FTXT_TOUPPER : 0)); |
| 842 | strtoupper(keyuc, key); |
| 843 | return *key && strstr(text, showonlyfavourites > 0 ? keyuc : key); |
| 844 | } |
| 845 | return false; |
| 846 | } |
| 847 | |
| 848 | const char *favcatcheck(serverinfo &si, const char *ckeys, char *autokeys = NULL) |
| 849 | { |
no test coverage detected