| 933 | } |
| 934 | |
| 935 | void initmap(servermap *m, stream *f) // set maprot parameters of a servermap |
| 936 | { |
| 937 | configsetvalues e; |
| 938 | memcpy(m->modes, base, sizeof(m->modes)); |
| 939 | if(m->hx_modeinfo && use_hx_modeinfo_mask) loopj(GMODE_NUM) |
| 940 | { |
| 941 | e.empty(); |
| 942 | loopk(CONFIG_MAXPAR) if(use_hx_modeinfo_mask & (1 << k)) e.par[k] = m->hx_modeinfo[j].par[k]; |
| 943 | m->modes[j].add(e); |
| 944 | } |
| 945 | |
| 946 | loopv(configsets) |
| 947 | { |
| 948 | configset &c = configsets[i]; |
| 949 | if(c.asterisk < 0 ? !strcmp(c.mapname, m->fname) : !strncmp(c.mapname, m->fname, c.asterisk)) |
| 950 | { |
| 951 | loopj(GMODE_NUM) if((1 << j) & c.mmask) m->modes[j].add(c); |
| 952 | } |
| 953 | } |
| 954 | m->modes_allowed = m->entstats.modes_possible & (isdedicated ? GMMASK__MPNOCOOP : GMMASK__ALL); |
| 955 | int rm[CR_NUM] = { 0 }, man = 0; |
| 956 | loopj(GMODE_NUM) |
| 957 | { |
| 958 | if(m->modes[j].manual > 0) man |= 1 << j; |
| 959 | for(int i = max(0, (int)m->modes[j].restrict); i < CR_NUM; i++) rm[i] |= 1 << j; |
| 960 | } |
| 961 | m->modes_auto = m->isautoplay() ? m->modes_allowed & ~man : 0; |
| 962 | loopi(CR_NUM) m->modes_cr[i] = m->modes_allowed & rm[i]; |
| 963 | loopi(MAXPLAYERS) m->modes_pn[i] = 0; |
| 964 | loopj(GMODE_NUM) |
| 965 | { |
| 966 | if((1 << j) & m->modes_allowed) |
| 967 | { |
| 968 | int lb = m->modes[j].minplayers < 1 ? 0 : m->modes[j].minplayers - 1, ub = m->modes[j].maxplayers < 1 || m->modes[j].maxplayers > MAXPLAYERS ? MAXPLAYERS : m->modes[j].maxplayers; |
| 969 | while(lb < ub) m->modes_pn[lb++] |= 1 << j; |
| 970 | } |
| 971 | } |
| 972 | if(f) |
| 973 | { |
| 974 | string s; |
| 975 | f->printf("maprot parameters for: %s%s\n", m->fpath, m->fname); |
| 976 | e.empty(); |
| 977 | loopj(GMODE_NUM) if((1 << j) & GMMASK__MPNOCOOP) |
| 978 | { |
| 979 | f->printf(" mode %s:", gmode_enum(1 << j, s)); |
| 980 | loopk(CONFIG_MAXPAR) if(e.par[k] != m->modes[j].par[k]) f->printf(" %s:%d", maprotkeywords[k], m->modes[j].par[k]); |
| 981 | f->printf("\n"); |
| 982 | } |
| 983 | f->printf(" modes_allowed %s\n", gmode_enum(m->modes_allowed, s)); |
| 984 | f->printf(" modes_auto %s\n", gmode_enum(m->modes_auto, s)); |
| 985 | f->printf(" modes man %s\n", gmode_enum(man, s)); |
| 986 | loopi(CR_NUM) f->printf(" modes_cr[%d] %s\n", i, gmode_enum(m->modes_cr[i], s)); |
| 987 | loopi(MAXPLAYERS) f->printf(" modes_pn[%02d] %s\n", i + 1, gmode_enum(m->modes_pn[i], s)); |
| 988 | f->printf("\n"); |
| 989 | } |
| 990 | } |
| 991 | |
| 992 | void oneminutepassed(int mode) |
no test coverage detected