| 901 | vector<const char *> favcattags; |
| 902 | |
| 903 | bool assignserverfavourites() |
| 904 | { |
| 905 | int alxn[FC_NUM]; |
| 906 | const char *alx[FC_NUM], *sep = " \t\n\r"; |
| 907 | favcattags.setsize(0); |
| 908 | bool res = false; |
| 909 | loopv(servers) { servers[i]->favcat = -1; servers[i]->weight = 0; } |
| 910 | loopvj(favcats) |
| 911 | { |
| 912 | loopi(FC_NUM) { alx[i] = getalias(favcatargname(favcats[j], i)); alxn[i] = alx[i] ? atoi(alx[i]) : 0; } |
| 913 | favcattags.add(alx[FC_TAG]); |
| 914 | bool showonlythiscat = j == showonlyfavourites - 1; |
| 915 | char *keys = newstring(alx[FC_KEYS]), *b, *k = strtok_r(keys, sep, &b); |
| 916 | while(k) |
| 917 | { |
| 918 | loopv(servers) |
| 919 | { |
| 920 | serverinfo &si = *servers[i]; |
| 921 | if(si.address.host == ENET_HOST_ANY || si.ping == 9999 || si.protocol != PROTOCOL_VERSION) continue; |
| 922 | if((!alxn[FC_IGNORE] || showonlythiscat) && favcatcheckkey(si, k)) |
| 923 | { |
| 924 | si.weight += alxn[FC_WEIGHT]; |
| 925 | res = true; |
| 926 | if(si.favcat == -1 || showonlythiscat) |
| 927 | { |
| 928 | si.favcat = j; |
| 929 | if(alxn[FC_ALPHA]) |
| 930 | { |
| 931 | if(!si.bgcolor) si.bgcolor = new color; |
| 932 | new (si.bgcolor) color(((float)alxn[FC_RED])/100, ((float)alxn[FC_GREEN])/100, ((float)alxn[FC_BLUE])/100, ((float)alxn[FC_ALPHA])/100); |
| 933 | } |
| 934 | else DELETEP(si.bgcolor) |
| 935 | } |
| 936 | } |
| 937 | } |
| 938 | k = strtok_r(NULL, sep, &b); |
| 939 | } |
| 940 | delete[] keys; |
| 941 | } |
| 942 | loopv(servers) if(servers[i]->favcat == -1) |
| 943 | { |
| 944 | DELETEA(servers[i]->bgcolor); |
| 945 | } |
| 946 | return res; |
| 947 | } |
| 948 | |
| 949 | COMMAND(addfavcategory, "s"); |
| 950 | COMMAND(listfavcats, ""); |
no test coverage detected