Team players

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
xedga
Jau po truputį tampa savu
Posts: 154
Joined: 2010 Sep 24 20:12
Skype: xedga-beribu
Location: Šiauliai/Kaunas

Team players

Post by xedga »

Kaip geriausiai suskaičiuoti prisijungusiu žaidėjų skaičių, pasirinkusių komandą. Nes get_playersnum priskaičiuoja ir UNASSIGNED žaidėjus.

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: Team players

Post by newb »

Code: Select all

get_players(players,num,"e","CT")get_players(players,num,"e","TERRORIST")
Ar tau reikia visus kartu ?

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Team players

Post by aaarnas »

Code: Select all

stock GetActivePlayersCount() {        new count, id, maxplayers = get_maxplayers()        for (id=1; id<maxplayers; id++)        if (get_user_team(id) > 0)            count++        return count;}
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Team players

Post by hleV »

Code: Select all

GetActivePlayerCount(){    new players[32], n, count;    get_players(players, n, "ceh", "TERRORIST"); count += n;    get_players(players, n, "ceh", "CT"); count += n;    get_players(players, n, "ceh", "SPECTATOR"); count += n;     return count;}
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
beast
AMX Mod X ekspertai
Posts: 509
Joined: 2011 Jan 08 18:44
Skype: thefurious4
Contact:

Re: Team players

Post by beast »

Code: Select all

GetActivePlayerCount(){    new players[32], all, uns        get_players(players, all, "ch")    get_players(players, uns, "ceh", "UNASSIGNED")        return all - uns}
:je:

User avatar
nuodas159
Flooderis arba specialistas
Posts: 522
Joined: 2010 Sep 03 15:30
Skype: nuodas159
Location: SunCity

Re: Team players

Post by nuodas159 »

Who will win? :D
Image

xedga
Jau po truputį tampa savu
Posts: 154
Joined: 2010 Sep 24 20:12
Skype: xedga-beribu
Location: Šiauliai/Kaunas

Re: Team players

Post by xedga »

beast man jau į skype parašė savo būda, tai jį ir bandysiu naudoti. Ačiū visiems už pagalba

InvIs
Gana aktyvus vartotojas
Posts: 421
Joined: 2011 Aug 13 11:12
Skype: pksoldierlt
Location: ATOSTOGOSE

Re: Team players

Post by InvIs »

Šiaip, nelabai nusimanau, bet...

Beast'o ir Hlev'o būdai, su get_players.

Kartais get_players stock'as nenaudoja to paties "for" ir neina per visus žaidėjus? Jei taip, tai arno būdas optimaliausias.
ISVYKES

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

Re: Team players

Post by hleV »

InvIs wrote: Kartais get_players stock'as nenaudoja to paties "for" ir neina per visus žaidėjus? Jei taip, tai arno būdas optimaliausias.
get_players ne stock'as.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Team players

Post by aaarnas »

get_players realizacija:

Code: Select all

static cell AMX_NATIVE_CALL get_players(AMX *amx, cell *params) /* 4 param */{    int iNum = 0;    int ilen;    char* sptemp = get_amxstring(amx, params[3], 0, ilen);    int flags = UTIL_ReadFlags(sptemp);     cell *aPlayers = get_amxaddr(amx, params[1]);    cell *iMax = get_amxaddr(amx, params[2]);     int team = 0;     if (flags & 48)    {        sptemp = get_amxstring(amx, params[4], 0, ilen);         if (flags & 16)        {            if (flags & 64)                team = g_teamsIds.findTeamId(sptemp);            else                team = g_teamsIds.findTeamIdCase(sptemp);        }    }     for (int i = 1; i <= gpGlobals->maxClients; ++i)    {        CPlayer* pPlayer = GET_PLAYER_POINTER_I(i);        if (pPlayer->ingame)        {            if (pPlayer->IsAlive() ? (flags & 2) : (flags & 1))                continue;            if (pPlayer->IsBot() ? (flags & 4) : (flags & 8))                continue;            if ((flags & 16) && (pPlayer->teamId != team))                continue;            if ((flags & 128) && (pPlayer->pEdict->v.flags & FL_PROXY))                continue;            if (flags & 32)            {                if (flags & 64)                {                    if (stristr(pPlayer->name.c_str(), sptemp) == NULL)                        continue;                }                else if (strstr(pPlayer->name.c_str(), sptemp) == NULL)                    continue;            }            aPlayers[iNum++] = i;        }    }     *iMax = iNum;        return 1;}
get_user_team realizacija:

Code: Select all

static cell AMX_NATIVE_CALL get_user_team(AMX *amx, cell *params) /* 3 param */{    int index = params[1];        if (index < 1 || index > gpGlobals->maxClients)        return -1;        CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);        if (pPlayer->ingame)    {        // SidLuke, DoD fix        if (g_bmod_dod)        {            int iTeam = pPlayer->pEdict->v.team;                        if (params[3])            {                const char *szTeam = "";                                switch (iTeam)                {                    case 1:                        szTeam = "Allies";                        break;                    case 2:                        szTeam = "Axis";                        break;                }                                set_amxstring(amx, params[2], szTeam, params[3]);            }            return iTeam;        }        //        if (params[3])        {            set_amxstring(amx, params[2], pPlayer->team.c_str(), params[3]);        }         return pPlayer->teamId;    }        return -1;}
Tai nėra tikslo šioje vietoje apskritai get_players naudoti.

Šiaip įdomų dalyką radau:
is_user_connected:

Code: Select all

static cell AMX_NATIVE_CALL is_user_connected(AMX *amx, cell *params) /* 1 param */{    int index = params[1];        if (index < 1 || index > gpGlobals->maxClients)        return 0;        CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);        return (pPlayer->ingame ? 1 : 0);}
Tiek is_user_connected tiek get_user_team:
1. Gauna duomenis iš GET_PLAYER_POINTER_I
2. Tikrina: pPlayer->ingame

Tad lieku prie šio varianto:

Code: Select all

stock GetActivePlayersCount() {        new count, id, maxplayers = get_maxplayers()        for (id=1; id<maxplayers; id++)        if (get_user_team(id) > 0)            count++        return count;}
-- 2013 Bir 13 23:27 --

Dėl įdomumo get_playersnum realizacija:

Code: Select all

static cell AMX_NATIVE_CALL get_playersnum(AMX *amx, cell *params){    if (!params[1])        return g_players_num;     int a = 0;        for (int i = 1; i <= gpGlobals->maxClients; ++i)    {        CPlayer* pPlayer = GET_PLAYER_POINTER_I(i);                if (pPlayer->initialized && (GETPLAYERUSERID(pPlayer->pEdict) > 0))            ++a;    }     return a;}
-- 2013 Bir 13 23:28 --
nuodas159 wrote:Who will win? :D
Me
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Google [Bot] and 5 guests