示例#1
0
void finish() {
  SDL_DestroyMutex(mutex);
  loopv(conlines) FREE(conlines[i].cref);
  loopv(vhistory) FREE(vhistory[i]);
  vhistory = vector<char*>();
  conlines = vector<cline>();
}
示例#2
0
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);
    };
};
示例#3
0
 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);
 }
示例#4
0
 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++;
         }
     }
示例#5
0
void stopreset()
{
    conoutf("demo stopped (%d msec elapsed)", lastmillis-starttime);
    stop();
    loopv(players) zapdynent(players[i]);
    disconnect(0, 0);
};
示例#6
0
void cleanmonsters() {
  loopv(monsters) FREE(monsters[i]);
  monsters.destroy();
  numkilled = 0;
  monstertotal = 0;
  spawnremain = 0;
}
示例#7
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]);
 }
示例#8
0
void menuprocess()
{
    int level = guistack.length();
    loopv(executelater) execute(executelater[i]);
    executelater.deletecontentsa();
    if(clearlater)
    {
        if(level==guistack.length()) guistack.deletecontentsa();
        clearlater = false;
    };
};
示例#9
0
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);
}
示例#10
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));
  }
}
示例#11
0
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);
}
示例#12
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));
    };
};
示例#13
0
void resetvotes() { loopv(clients) clients[i].mapvote[0] = 0; }
示例#14
0
 void g3d_npcmenus() { loopv(objects) objects[i]->g3d_menu(); } 
示例#15
0
 void renderobjects() { loopv(objects) objects[i]->render();   }
示例#16
0
    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;
    }
示例#17
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);
}
示例#18
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);
}