MCPcopy Create free account
hub / github.com/assaultcube/AC / serverslice

Function serverslice

source/src/server.cpp:4528–4699  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4526SERVPARLIST(mandatory_auth, 0, 1, 0, endis, "sEnforce IDs for all clients even on unlisted server/LAN game");
4527
4528void 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();

Callers 2

initserverFunction · 0.85
main.cppFile · 0.85

Calls 15

entropy_add_byteFunction · 0.85
readdemoFunction · 0.85
silenttimeupdateFunction · 0.85
processeventsFunction · 0.85
checkitemspawnsFunction · 0.85
flagactionFunction · 0.85
htf_forceflagFunction · 0.85
arenacheckFunction · 0.85
autospawncheckFunction · 0.85
check_afkFunction · 0.85
numnonlocalclientsFunction · 0.85
checkintermissionFunction · 0.85

Tested by

no test coverage detected