void finish() { SDL_DestroyMutex(mutex); loopv(conlines) FREE(conlines[i].cref); loopv(vhistory) FREE(vhistory[i]); vhistory = vector<char*>(); conlines = vector<cline>(); }
void renderscores() { if(!scoreson) return; scorelines.setsize(0); if(!demoplayback) renderscore(player1); loopv(players) if(players[i]) renderscore(players[i]); // Added by Rick: Render Score for bots loopv(bots) if(bots[i]) renderscore(bots[i]); sortmenu(0, scorelines.length()); if(m_teammode) { teamsused = 0; loopv(players) addteamscore(players[i]); // Added by Rick: Add team scores for bots loopv(bots) addteamscore(bots[i]); if(!demoplayback) addteamscore(player1); teamscores[0] = 0; loopj(teamsused) { sprintf_sd(sc)("[ %s: %d ]", teamname[j], teamscore[j]); strcat_s(teamscores, sc); }; menumanual(0, scorelines.length(), ""); menumanual(0, scorelines.length()+1, teamscores); }; };
void getbestteams(vector<const char *> &best) { vector<teamscore> teamscores; sortteams(teamscores); while(teamscores.length()>1 && teamscores.last().score < teamscores[0].score) teamscores.drop(); loopv(teamscores) best.add(teamscores[i].team); }
void clearmonsters() // called after map start or when toggling edit mode to reset/spawn all monsters to initial state { removetrackedparticles(); removetrackeddynlights(); loopv(monsters) delete monsters[i]; cleardynentcache(); monsters.shrink(0); numkilled = 0; monstertotal = 0; spawnremain = 0; remain = 0; monsterhurt = false; if(m_dmsp) { nextmonster = mtimestart = lastmillis+10000; monstertotal = spawnremain = skill*10; } else if(m_classicsp || !spguard) { mtimestart = lastmillis; loopv(entities::ents) { extentity &e = *entities::ents[i]; if(e.type!=MONSTER) continue; monster *m = new monster(e.attr2, e.attr1, e.attr3, M_SLEEP, 100, 0); monsters.add(m); m->o = e.o; entinmap(m); updatedynentcache(m); monstertotal++; } }
void stopreset() { conoutf("demo stopped (%d msec elapsed)", lastmillis-starttime); stop(); loopv(players) zapdynent(players[i]); disconnect(0, 0); };
void cleanmonsters() { loopv(monsters) FREE(monsters[i]); monsters.destroy(); numkilled = 0; monstertotal = 0; spawnremain = 0; }
void initplayers() { loopv(clients) initplayer(clients[i]); vector<clientinfo*> activeplayers = getactiveplayers(); if(activeplayers.length() < 2) return; int seeker = rnd(activeplayers.length()); setseeker(activeplayers[seeker]); }
void menuprocess() { int level = guistack.length(); loopv(executelater) execute(executelater[i]); executelater.deletecontentsa(); if(clearlater) { if(level==guistack.length()) guistack.deletecontentsa(); clearlater = false; }; };
void stop(void) { if (f) { if (demorecording) gzputi(-1); gzclose(f); } f = NULL; demorecording = false; demoplayback = false; demoloading = false; loopv(playerhistory) game::zapdynent(playerhistory[i]); playerhistory.setsize(0); }
static void savestate(char *fn) { stop(); f = gzopen(fn, "wb9"); if (!f) { con::out("could not write %s", fn); return; } gzwrite(f, (void *)"CUBESAVE", 8); gzputc(f, sys::islittleendian()); gzputi(SAVEGAMEVERSION); gzputi(sizeof(game::dynent)); gzwrite(f, (const voidp) game::getclientmap(), MAXDEFSTR); gzputi(game::mode()); gzputi(game::ents.length()); loopv(game::ents) gzputc(f, game::ents[i].spawned); gzwrite(f, game::player1, sizeof(game::dynent)); game::dvector &monsters = game::getmonsters(); gzputi(monsters.length()); loopv(monsters) gzwrite(f, monsters[i], sizeof(game::dynent)); gzputi(game::players.length()); loopv(game::players) { gzput(game::players[i]==NULL); gzwrite(f, game::players[i], sizeof(game::dynent)); } }
void stop() { if (f) { if (demorecording) gzputi(-1); gzclose(f); }; f = NULL; demorecording = false; demoplayback = false; demoloading = false; loopv(playerhistory) zapSprite(playerhistory[i]); playerhistory.resize(0); }
void savestate(char *fn) { stop(); f = gzopen(fn, "wb9"); if(!f) { conoutf("could not write %s", fn); return; }; gzwrite(f, (void *)"CUBESAVE", 8); gzputc(f, islittleendian); gzputi(SAVEGAMEVERSION); gzputi(sizeof(dynent)); gzwrite(f, getclientmap(), _MAXDEFSTR); gzputi(gamemode); gzputi(ents.length()); loopv(ents) gzputc(f, ents[i].spawned); gzwrite(f, player1, sizeof(dynent)); dvector &monsters = getmonsters(); gzputi(monsters.length()); loopv(monsters) gzwrite(f, monsters[i], sizeof(dynent)); gzputi(players.length()); loopv(players) { gzput(players[i]==NULL); gzwrite(f, players[i], sizeof(dynent)); }; };
void resetvotes() { loopv(clients) clients[i].mapvote[0] = 0; }
void g3d_npcmenus() { loopv(objects) objects[i]->g3d_menu(); }
void renderobjects() { loopv(objects) objects[i]->render(); }
static int requestthread(http_t *http) { request_t *req = http->request; http->curl = curl_easy_init(); if (!http->curl) abort(); curl_slist *headers = NULL; string proxy; #define setopt(OPT, VAL) \ do \ { \ if (curl_easy_setopt(http->curl, OPT, VAL) != CURLE_OK) \ { \ conoutf_r("curl_easy_setopt() failed: %s:%d", __FILE__, __LINE__); \ http->responsecode = QUERY_ABORTED; \ goto error; \ } \ } while (0) setopt(CURLOPT_CONNECTTIMEOUT, req->connecttimeout); setopt(CURLOPT_TIMEOUT, req->timeout); setopt(CURLOPT_URL, req->request.str()); setopt(CURLOPT_WRITEFUNCTION, &contentcallback); setopt(CURLOPT_WRITEDATA, http); setopt(CURLOPT_FOLLOWLOCATION, 1L); // follow redirects setopt(CURLOPT_FILETIME, 1L); setopt(CURLOPT_NOSIGNAL, 1L); setopt(CURLOPT_SSL_VERIFYPEER, 1L); if (req->cacert) { setopt(CURLOPT_CAPATH, "/dev/null"); setopt(CURLOPT_CAINFO, req->cacert.str()); } if (req->statuscallback) { setopt(CURLOPT_NOPROGRESS, 0L); setopt(CURLOPT_PROGRESSDATA, http); setopt(CURLOPT_PROGRESSFUNCTION, &downloadstatuscallback); } if (!req->headers.empty()) { loopv(req->headers) headers = curl_slist_append(headers, req->headers[i].header); setopt(CURLOPT_HTTPHEADER, headers); } if (req->referer) { setopt(CURLOPT_REFERER, req->referer.str()); setopt(CURLOPT_AUTOREFERER, 1L); // send referer } if (req->useragent) setopt(CURLOPT_USERAGENT, req->useragent.str()); getproxy(proxy, sizeof(proxy)); if (*proxy) setopt(CURLOPT_PROXY, proxy); if (http->speedlimit) setopt(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)http->speedlimit); // try to avoid re-allocs if (req->expecteddatalen) http->data.reserve(req->expecteddatalen); http->requestresult = curl_easy_perform(http->curl); if (headers) curl_slist_free_all(headers); http->requestok = (http->requestresult == CURLE_OK || http->requestresult == CURLE_WRITE_ERROR); // happens if contentcallback returns 0 - but count it as ok switch (http->requestresult) { case CURLE_WRITE_ERROR: http->responsecode = QUERY_ABORTED; break; case CURLE_SSL_CONNECT_ERROR: case CURLE_SSL_ISSUER_ERROR: case CURLE_SSL_CRL_BADFILE: case CURLE_SSL_CACERT: http->responsecode = SSL_ERROR; break; case CURLE_OPERATION_TIMEDOUT: http->responsecode = TIMEDOUT; break; default: if (curl_easy_getinfo(http->curl, CURLINFO_HTTP_CODE, &http->responsecode) != CURLE_OK) http->responsecode = INVALID_RESPONSE_CODE; } if (req->nullterminatorneeded) http->data.add('\0'); http->data.resize(); // save memory long lastmodified; if (curl_easy_getinfo(http->curl, CURLINFO_FILETIME, &lastmodified) == CURLE_OK && lastmodified > 0) http->lastmodified = lastmodified; error:; curl_easy_cleanup(http->curl); http->curl = NULL; { SDL_Mutex_Locker m(http->requestmutex); http->processed = true; } return 0; }
static void stopreset(void) { con::out("demo stopped (%d msec elapsed)", game::lastmillis()-starttime); stop(); loopv(game::players) game::zapdynent(game::players[i]); client::disconnect(0, 0); }
void rendermonsters() { loopv(monsters) renderclient(monsters[i], false, monstertypes[monsters[i]->mtype].mdlname, monsters[i]->mtype==5, monstertypes[monsters[i]->mtype].mscale/10.0f); }