Example #1
0
 static int groupplayers()
 {
     int numgroups = 0;
     spectators.shrink(0);
     loopv(players)
     {
         fpsent *o = players[i];
         if(!showconnecting && !o->name[0]) continue;
         if(o->state==CS_SPECTATOR) { spectators.add(o); continue; }
         const char *team = m_teammode && o->team[0] ? o->team : NULL;
         bool found = false;
         loopj(numgroups)
         {
             scoregroup &g = *groups[j];
             if(team!=g.team && (!team || !g.team || strcmp(team, g.team))) continue;
             if(team && (!cmode || !cmode->hidefrags())) g.score += o->frags;
             g.players.add(o);
             found = true;
         }
         if(found) continue;
         if(numgroups>=groups.length()) groups.add(new scoregroup);
         scoregroup &g = *groups[numgroups++];
         g.team = team;
         if(!team) g.score = 0;
         else if(cmode && cmode->hidefrags()) g.score = cmode->getteamscore(o->team);
         else g.score = o->frags;
         g.players.shrink(0);
         g.players.add(o);
     }
     loopi(numgroups) groups[i]->players.sort(playersort);
     spectators.sort(playersort);
     groups.sort(scoregroupcmp, 0, numgroups);
     return numgroups;
 }
Example #2
0
static void addarg(vector<char> &argstr, const char *name, const char *val)
{
    addarg(argstr, name);
    bool space = strchr(val, ' ')!=NULL;
    if(space) argstr.add('"');
    argstr.put(val, strlen(val));
    if(space) argstr.add('"');
}
Example #3
0
bool listdir(const char *dir, const char *ext, vector<char *> &files)
{
    int extsize = ext ? (int)strlen(ext)+1 : 0;
    #if defined(WIN32)
    defformatstring(pathname)("%s\\*.%s", dir, ext ? ext : "*");
    WIN32_FIND_DATA FindFileData;
    HANDLE Find = FindFirstFile(path(pathname), &FindFileData);
    if(Find != INVALID_HANDLE_VALUE)
    {
        do {
            if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                files.add(newstring(FindFileData.cFileName, (int)strlen(FindFileData.cFileName) - extsize));
        } while(FindNextFile(Find, &FindFileData));
        FindClose(Find);
        return true;
    }
    #else
    string pathname;
    copystring(pathname, dir);
    DIR *d = opendir(path(pathname));
    if(d)
    {
        struct dirent *de, b;
        while(!readdir_r(d, &b, &de) && de != NULL)
        {
            bool isreg = false;
        #ifdef _DIRENT_HAVE_D_TYPE
            if(de->d_type == DT_REG) isreg = true;
            else if(de->d_type == DT_UNKNOWN)
        #endif
            {
                struct stat s;
                int dl = (int)strlen(pathname);
                concatformatstring(pathname, "/%s", de->d_name);
                isreg = !lstat(pathname, &s) && S_ISREG(s.st_mode);
                pathname[dl] = '\0';
            }
            if(isreg)
            {
                if(!ext) files.add(newstring(de->d_name));
                else
                {
                    int namelength = (int)strlen(de->d_name) - extsize;
                    if(namelength > 0 && de->d_name[namelength] == '.' && strncmp(de->d_name+namelength+1, ext, extsize-1)==0)
                        files.add(newstring(de->d_name, namelength));
                }
            }
        }
        closedir(d);
        return true;
    }
    #endif
    else return false;
}
Example #4
0
static void updateval(char *var, int val, char *onchange)
{
    ident *id = getident(var);
    string assign;
    if(!id) return;
    else if(id->_type==ID_VAR) s_sprintf(assign)("%s %d", var, val);
    else if(id->_type==ID_ALIAS) s_sprintf(assign)("%s = %d", var, val);
    else return;
    executelater.add(newstring(assign));
    if(onchange[0]) executelater.add(newstring(onchange));
};
void CslGameRedEclipse::GetPlayerstatsDescriptions(vector<wxString>& desc) const
{
    desc.add(_("Player"));
    desc.add(_("Team"));
    desc.add(_("Frags"));
    desc.add(_("Deaths"));
    desc.add(_("Teamkills"));
    desc.add(_("Ping"));
    desc.add(_("Accuracy"));
    desc.add(_("Health"));
    desc.add(_("Spree"));
    desc.add(_("Weapon"));
}
Example #6
0
 int addvert(const vertex &v)
 {
     uint h = hthash(v.pos)&(SIZE-1);
     for(int i = table[h]; i>=0; i = chain[i])
     {
         const vertex &c = verts[i];
         if(c.pos==v.pos && c.tc==v.tc && c.norm==v.norm && c.tangent==v.tangent && c.bitangent==v.bitangent)
              return i;
     }
     if(verts.length() >= USHRT_MAX) return -1;
     verts.add(v);
     chain.add(table[h]);
     return table[h] = verts.length()-1;
 }
Example #7
0
void mmodel(char *name, int *tex)
{
    mapmodelinfo &mmi = mapmodels.add();
    s_strcpy(mmi.name, name);
    mmi.tex = *tex;
    mmi.m = NULL;
};
Example #8
0
void resolverquery(char *name)
{
    SDL_LockMutex(resolvermutex);
    resolverqueries.add(name);
    SDL_SemPost(resolversem);
    SDL_UnlockMutex(resolvermutex);
};
Example #9
0
uint32_t get_next_shared_ptr_id() {
    shared_ptr_list_lock.lock();
    shared_ptr_is_alive.add(true);
    uint32_t ret = shared_ptr_is_alive.length() - 1;
    shared_ptr_list_lock.unlock();
    return ret;
}
Example #10
0
void mapmodel(char *name)
{
    mapmodelinfo &mmi = mapmodels.add();
    if(name[0]) formatstring(mmi.name, "%s%s", mmprefix, name);
    else mmi.name[0] = '\0';
    mmi.m = mmi.collide = NULL;
}
Example #11
0
void renderscore(dynent *d)
{
    sprintf_sd(lag)("%d", d->plag);
    sprintf_sd(name) ("(%s)", d->name); 
    sprintf_s(scorelines.add().s)("%d\t%s\t%d\t%s\t%s", d->frags, d->state==CS_LAGGED ? "LAG" : lag, d->ping, d->team, d->state==CS_DEAD ? name : d->name);
    menumanual(0, scorelines.length()-1, scorelines.last().s); 
};
Example #12
0
void mapmodel(char *rad, char *h, char *zoff, char *snap, char *name)
{
  md2 *m = loadmodel(name);
  mapmodelinfo mmi = { atoi(rad), atoi(h), atoi(zoff), atoi(snap), m->loadname };
  m->mmi = mmi;
  mapmodels.add(m);
}
Example #13
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++;
         }
     }
Example #14
0
int resolverloop(void * data)
{
    resolverthread *rt = (resolverthread *)data;
    for(;;)
    {
        SDL_SemWait(resolversem);
        SDL_LockMutex(resolvermutex);
        if(resolverqueries.empty())
        {
            SDL_UnlockMutex(resolvermutex);
            continue;
        }
        rt->query = resolverqueries.pop();
        rt->starttime = lastmillis;
        SDL_UnlockMutex(resolvermutex);
        ENetAddress address = { ENET_HOST_ANY, CUBE_SERVINFO_PORT };
        enet_address_set_host(&address, rt->query);
        SDL_LockMutex(resolvermutex);
        resolverresult &rr = resolverresults.add();
        rr.query = rt->query;
        rr.address = address;
        rt->query = NULL;
        rt->starttime = 0;
        SDL_UnlockMutex(resolvermutex);
    };
    return 0;
};
Example #15
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);
 }
Example #16
0
client &addclient(int type)
{
    client *c = NULL;
    loopv(clients) if(clients[i]->type==ST_EMPTY)
    {
        c = clients[i];
        break;
    }
    if(!c)
    {
        c = new client;
        c->num = clients.length();
        clients.add(c);
    }
    c->info = server::newclientinfo();
    c->type = type;
    switch(type)
    {
    case ST_TCPIP:
        nonlocalclients++;
        break;
    case ST_LOCAL:
        localclients++;
        break;
    }
    return *c;
}
Example #17
0
static void addnormal(const vec &key, const vec &surface)
{
    nval &val = normalgroups[key];
    normal &n = normals.add();
    n.next = val.normals;
    n.surface = surface;
    val.normals = normals.length()-1;
}
Example #18
0
void guiimage(char *path, char *action, float *scale, int *overlaid)
{
    if(cgui && cgui->image(path, *scale, *overlaid!=0)&G3D_UP && *action)
    {
        executelater.add(newstring(action));
        clearlater = true;
    };
};
Example #19
0
void addasleep(int *msec, char *cmd)
{
    sleepcmd &s = asleepcmds.add();
    s.delay = max(*msec, 1);
    s.millis = totalmillis;
    s.command = newstring(cmd);
    s.flags = identflags;
}
Example #20
0
static int addnormal(const vec &key, const vec &surface)
{
    normalgroup &g = normalgroups.access(key, key);
    normal &n = normals.add();
    n.next = g.normals;
    n.surface = surface;
    return g.normals = normals.length()-1;
}
Example #21
0
static int addnormal(const vec &pos, int smooth, const vec &surface)
{
    normalkey key = { pos, smooth };
    normalgroup &g = normalgroups.access(key, key);
    normal &n = normals.add();
    n.next = g.normals;
    n.surface = surface;
    return g.normals = normals.length()-1;
}
Example #22
0
static bool readzipdirectory(const char *archname, FILE *f, int entries, int offset, uint size, vector<zipfile> &files)
{
    uchar *buf = new uchar[size], *src = buf;
    if(fseek(f, offset, SEEK_SET) < 0 || fread(buf, 1, size, f) != size) { delete[] buf; return false; }
    loopi(entries)
    {
        if(src + ZIP_FILE_SIZE > &buf[size]) break;

        zipfileheader hdr;
        hdr.signature = lilswap(*(uint *)src); src += 4;
        hdr.version = lilswap(*(ushort *)src); src += 2;
        hdr.needversion = lilswap(*(ushort *)src); src += 2;
        hdr.flags = lilswap(*(ushort *)src); src += 2;
        hdr.compression = lilswap(*(ushort *)src); src += 2;
        hdr.modtime = lilswap(*(ushort *)src); src += 2;
        hdr.moddate = lilswap(*(ushort *)src); src += 2;
        hdr.crc32 = lilswap(*(uint *)src); src += 4;
        hdr.compressedsize = lilswap(*(uint *)src); src += 4;
        hdr.uncompressedsize = lilswap(*(uint *)src); src += 4;
        hdr.namelength = lilswap(*(ushort *)src); src += 2;
        hdr.extralength = lilswap(*(ushort *)src); src += 2;
        hdr.commentlength = lilswap(*(ushort *)src); src += 2;
        hdr.disknumber = lilswap(*(ushort *)src); src += 2;
        hdr.internalattribs = lilswap(*(ushort *)src); src += 2;
        hdr.externalattribs = lilswap(*(uint *)src); src += 4;
        hdr.offset = lilswap(*(uint *)src); src += 4;
        if(hdr.signature != ZIP_FILE_SIGNATURE) break;
        if(!hdr.namelength || !hdr.uncompressedsize || (hdr.compression && (hdr.compression != Z_DEFLATED || !hdr.compressedsize)))
        {
            src += hdr.namelength + hdr.extralength + hdr.commentlength;
            continue;
        }
        if(src + hdr.namelength > &buf[size]) break;

        string pname;
        int namelen = min((int)hdr.namelength, (int)sizeof(pname)-1);
        memcpy(pname, src, namelen);
        pname[namelen] = '\0';
        path(pname);
        char *name = newstring(pname);

        zipfile &f = files.add();
        f.name = name;
        f.header = hdr.offset;
        f.size = hdr.uncompressedsize;
        f.compressedsize = hdr.compression ? hdr.compressedsize : 0;
#ifndef STANDALONE
        if(dbgzip) conoutf(CON_DEBUG, "%s: file %s, size %d, compress %d, flags %x", archname, name, hdr.uncompressedsize, hdr.compression, hdr.flags);
#endif

        src += hdr.namelength + hdr.extralength + hdr.commentlength;
    }
    delete[] buf;

    return files.length() > 0;
}
Example #23
0
void menuset(void *m, bool save)
{
    if(curmenu==m) return;
    if(curmenu)
    {
        if(save && curmenu->allowinput) menustack.add(curmenu);
        else curmenu->close();
    }
    if((curmenu = (gmenu *)m)) curmenu->open();
}
void ClientSystem::addHUDText(const char *text, float x, float y, float scale, int color)
{
    queuedHUDText q;
    q.text = text;
    q.x = x;
    q.y = y;
    q.scale = scale;
    q.color = color;
    queuedHUDTexts.add(q);
}
Example #25
0
void addpackagedir(const char *dir)
{
#ifndef STANDALONE
    clientlogf("Adding package directory: %s", dir);
#endif

    string pdir;
    copystring(pdir, dir);
    if(fixpackagedir(pdir) > 0) packagedirs.add(newstring(pdir));
}
Example #26
0
 void ignore(int cn, int attempt) {
   fpsent *d = game::getclient(cn);
   if(attempt == 0) {error("please connect to a server to ignore");}
   else if(!d) {error("please enter a valid client number");}
   else if(d == game::player1) {error("you cannot ignore yourself");}
   else if(isignored(cn)) {error("user %s is already being ignored", d->name);}
   else {
     info("ignoring %s", d->name);
     if(ignores.find(cn) < 0) ignores.add(cn);
   }
 }
void ClientSystem::addHUDRect(float x1, float y1, float x2, float y2, int color, float alpha)
{
    queuedHUDRect q;
    q.x1 = x1;
    q.y1 = y1;
    q.x2 = x2;
    q.y2 = y2;
    q.color = color;
    q.alpha = alpha;
    queuedHUDRects.add(q);
}
void ClientSystem::addHUDImage(const char *tex, float centerX, float centerY, float width, float height, int color, float alpha)
{
    queuedHUDImage q;
    q.tex = tex;
    q.centerX = centerX;
    q.centerY = centerY;
    q.width = width;
    q.height = height;
    q.color = color;
    q.alpha = alpha;
    queuedHUDImages.add(q);
}
Example #29
0
void addparticleemitters()
{
    emitters.shrink(0);
    const vector<extentity *> &ents = entities::getents();
    loopv(ents)
    {
        extentity &e = *ents[i];
        if(e.type != ET_PARTICLES) continue;
        emitters.add(particleemitter(&e));
    }
    regenemitters = false;
}
Example #30
0
static void addtnormal(const vec &key, float offset, int normal1, int normal2, normalgroup *group1, normalgroup *group2)
{
    normalgroup &g = normalgroups.access(key, key);
    tnormal &n = tnormals.add();
    n.next = g.tnormals;
    n.offset = offset;
    n.normals[0] = normal1;
    n.normals[1] = normal2;
    n.groups[0] = group1;
    n.groups[1] = group2;
    g.tnormals = tnormals.length()-1;
}