| 4526 | SERVPARLIST(mandatory_auth, 0, 1, 0, endis, "sEnforce IDs for all clients even on unlisted server/LAN game"); |
| 4527 | |
| 4528 | void serverslice(uint timeout) // main server update, called from cube main loop in sp, or dedicated server loop |
| 4529 | { |
| 4530 | static int msend = 0, mrec = 0, csend = 0, crec = 0, mnum = 0, cnum = 0; |
| 4531 | #ifdef STANDALONE |
| 4532 | int nextmillis = (int)enet_time_get(); |
| 4533 | if(svcctrl) svcctrl->keepalive(); |
| 4534 | #else |
| 4535 | int nextmillis = isdedicated ? (int)enet_time_get() : lastmillis; |
| 4536 | #endif |
| 4537 | int diff = nextmillis - servmillis; |
| 4538 | if(!sg->sispaused) sg->gamemillis += diff; |
| 4539 | servmillis = nextmillis; |
| 4540 | entropy_add_byte(diff); |
| 4541 | |
| 4542 | #ifndef STANDALONE |
| 4543 | if(m_demo) |
| 4544 | { |
| 4545 | readdemo(); |
| 4546 | extern void silenttimeupdate(int milliscur, int millismax); |
| 4547 | silenttimeupdate(sg->gamemillis, gametimemaximum); |
| 4548 | } |
| 4549 | #endif |
| 4550 | |
| 4551 | if(sg->minremain > 0 && !sg->sispaused) |
| 4552 | { |
| 4553 | processevents(); |
| 4554 | checkitemspawns(diff); |
| 4555 | bool ktfflagingame = false; |
| 4556 | if(m_flags_) loopi(2) |
| 4557 | { |
| 4558 | sflaginfo &f = sg->sflaginfos[i]; |
| 4559 | if(f.state == CTFF_DROPPED && sg->gamemillis-f.lastupdate > (m_ctf ? 30000 : 10000)) flagaction(i, FA_RESET, -1); |
| 4560 | if(m_htf && f.state == CTFF_INBASE && sg->gamemillis-f.lastupdate > (sg->curmap && sg->curmap->entstats.hasflags ? 10000 : 1000)) |
| 4561 | { |
| 4562 | htf_forceflag(i); |
| 4563 | } |
| 4564 | if(m_ktf && f.state == CTFF_STOLEN && sg->gamemillis-f.lastupdate > 15000) |
| 4565 | { |
| 4566 | flagaction(i, FA_SCORE, -1); |
| 4567 | } |
| 4568 | if(f.state == CTFF_INBASE || f.state == CTFF_STOLEN) ktfflagingame = true; |
| 4569 | } |
| 4570 | if(m_ktf && !ktfflagingame) flagaction(rnd(2), FA_RESET, -1); // ktf flag watchdog |
| 4571 | if(m_arena) arenacheck(); |
| 4572 | else if(m_autospawn) autospawncheck(); |
| 4573 | if(scl.afk_limit && sg->mastermode == MM_OPEN && next_afk_check < servmillis && sg->gamemillis > 20 * 1000) check_afk(); |
| 4574 | } |
| 4575 | |
| 4576 | if(curvote) |
| 4577 | { |
| 4578 | if(!curvote->isalive()) curvote->evaluate(true); |
| 4579 | if(curvote->result!=VOTE_NEUTRAL) DELETEP(curvote); |
| 4580 | } |
| 4581 | |
| 4582 | int nonlocalclients = numnonlocalclients(); |
| 4583 | |
| 4584 | if(sg->forceintermission || ((sg->smode > 1 || (gamemode == 0 && nonlocalclients)) && sg->gamemillis-diff > 0 && sg->gamemillis / 60000 != (sg->gamemillis - diff) / 60000)) |
| 4585 | checkintermission(); |
no test coverage detected