hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 21:46



Jelenlévő felhasználók

Jelenleg 255 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 255 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 5 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Csapatkeveréshez kódigény
HozzászólásElküldve: 2016.07.10. 18:33 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Egy plugint (Advanced Team Transfer) alakítottam át saját használatra hogy cseréljem a csapatokat igény szerint chatről, viszont szeretnék bele egy keverés részt is, de a csapatlétszámoknál kicsit elakadtam.
Itt járok, s egy kis segítséget megköszönnék :D
  1. new players[32], x;
  2. get_players(players,x,"h");
  3. if (x==0)   return PLUGIN_HANDLED;
  4. new counter = 0
  5. for(new a = 0; a < x; a++)
  6. {
  7.     counter++
  8.     if(counter == 2)
  9.     {
  10.         new countT = getPlayersNum(CS_TEAM_T)
  11.         new countCT = getPlayersNum(CS_TEAM_CT)
  12.         if(countT >= countCT+2 || countCT >= countT+2)
  13.             return PLUGIN_CONTINUE;
  14.            
  15.         if(get_user_team(players[a])==1)
  16.             cs_set_user_team (players[a], CS_TEAM_CT)
  17.         if(get_user_team(players[a])==2)
  18.             cs_set_user_team (players[a], CS_TEAM_T)
  19.         counter = 0
  20.     }
  21. }



  1. getPlayersNum(CsTeams:Team)
  2. {
  3.     new iCount = 0, pnum = 0, players[32];
  4.     get_players(players, pnum);
  5.  
  6.     for(new i = 1; i <= pnum; i++)
  7.     {
  8.         if(is_user_connected(i))
  9.         {
  10.             if(cs_get_user_team(i) == Team)
  11.             {
  12.                 ++iCount;
  13.             }
  14.         }
  15.     }
  16.     return iCount;
  17. }


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Csapatkeveréshez kódigény
HozzászólásElküldve: 2016.07.11. 01:34 
Offline
Jómunkásember
Avatar

Csatlakozott: 2013.01.15. 19:04
Hozzászólások: 407
Megköszönt másnak: 17 alkalommal
Megköszönték neki: 176 alkalommal
1. for ciklusban felesleges a counter változó, ha már minden második eset kell neked akkor csak egyszerűen kettesével lépkedsz a for-ban ( for ( new a = 0; a < x; a += 2 ) ).
2. Nem kell minden for lépésnél lekérni a CT illetve T játékosok számát, elég 1x a for előtt, illetve az if rész ( if(countT >= countCT+2 || countCT >= countT+2) ) is mehet a foron kívülre, mivel elég 1x leellenőrizni a létszámot.
3. Van egyszerűbb módja is a játékosok megszámlálására.

  1. public asd( )
  2. {
  3.     new iPlayers[ 32 ], iPlayerCount;
  4.     get_players( iPlayers, iPlayerCount, "h" );
  5.    
  6.     new iTeams[ CsTeams ];
  7.     GetPlayerCount( iTeams );
  8.    
  9.     if ( iTeams[ CS_TEAM_T ] >= iTeams[ CS_TEAM_CT ] + 2 || iTeams[ CS_TEAM_CT ] >= iTeams[ CS_TEAM_T ] + 2 )
  10.         return PLUGIN_HANDLED;
  11.    
  12.     for ( new i, iPlrId; i < iPlayerCount; i += 2 )
  13.     {
  14.         iPlrId = iPlayers[ i ];
  15.         if ( cs_get_user_team( iPlrId ) == 1 )
  16.             cs_set_user_team ( iPlrId, CS_TEAM_CT )
  17.         else if ( cs_get_user_team( iPlrId ) == 2 )
  18.             cs_set_user_team ( iPlrId, CS_TEAM_T )
  19.     }
  20. }
  21.        
  22. stock GetPlayerCount( iTeamPlayers[ CsTeams ] )
  23. {
  24.     static iPlayers[ 32 ], iPlayerCount;
  25.    
  26.     get_players( iPlayers, iPlayerCount );
  27.    
  28.     for ( new i = 0 ; i < iPlayerCount ; ++i )
  29.         ++iTeamPlayers[ cs_get_user_team( iPlayers[ i ] ) ];
  30. }

Ők köszönték meg demon nek ezt a hozzászólást: regener (2016.07.11. 02:01)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Csapatkeveréshez kódigény
HozzászólásElküldve: 2016.07.11. 02:01 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Köszi, viszont ha jól értelmezem a kódod akkor itt ha egyik csapat sem több 2-vel mint a másik, akkor átrak minden 2. embert valahová, viszont lehet hogy az átrakás után már mondjuk 2 vagy annál több lesz a csapatlétszámok különbsége.

1. Igaz, nemtudom miért nem jutott eszembe
2. Azért kértem le folyamatosan a létszámot hogy addig fusson amíg ez meg nem történik, mert ilyenkor lehet hogy 5v5-ből kialakul mondjuk 3v7 vagy ilyesmi, az autobalance meg 2 kör addig meg megy az adminok szidása...
2.1 Most jöttem rá hogy nem is return kell nekem itt hanem break, mert ezután nem tud lefutni az üzenet az átrakásról :D
(dhudmessage van amit mindenki megkap hogy lássák mi történt, igaz a játékosok fele rákérdez hogy miért őt rakta át, amikor a fél képernyő méretű üzenet ott virít a képébe a kör végén/elején - kör végén történik a mozgatás)
3. igaz, de nem vagyok egy nagy szaki még


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Csapatkeveréshez kódigény
HozzászólásElküldve: 2016.07.11. 04:20 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Szövegesen le tudnád írni, h mi a pontos cél?

Viszont eddig, amit nem tartanék hülyeségnek:
  1. fnTeamTransfer( )
  2. {
  3.     new iCTs[ MAX_PLAYERS + 1 ], iTs[ MAX_PLAYERS + 1 ], iNumOfCTs, iNumOfTs;
  4.  
  5.     get_players( iCTs, iNumOfCTs, "ce", "CT" );
  6.     get_players( iTs, iNumOfTs, "ce", "T" );
  7.  
  8.     if ( -2 <= ( iNumOfCTs - iNumOfTs ) <= 2 ) // ha nincs az egyik csapatban 2-vel több
  9.     {
  10.         for ( new i; i < iNumOfCTs; ++i )
  11.             cs_set_user_team( iCTs[ i ], CS_TEAM_T );
  12.         for ( new i; i < iNumOfTs; ++i )
  13.             cs_set_user_team( iTs[ i ], CS_TEAM_CT );
  14.     }
  15. }


De még egyszer mondom, nem teljesen értettem meg a célod a kódból.

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Csapatkeveréshez kódigény
HozzászólásElküldve: 2016.07.11. 10:15 
Offline
Őstag
Avatar

Csatlakozott: 2015.07.27. 22:56
Hozzászólások: 1367
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 351 alkalommal
Igaz, kicsit hülyén írtam le.

Tehát Már van egy funkció amely simán megcseréli a 2 csapatot és ezenkívül szeretnék egy olyan keverést amely nem az egész csapatot érinti hanem mondjuk minden 2. játékost csak és azokat cseréli meg. De azt se akarom hogy mondjuk ha minden második játékos CT akkor átrakja mindet T-be és totál unbalanced legyen.

Valami olyasmi lehet hogy letárolni az a CT és T játékosokat és a letároltakból cserélni ugyanannyi mennyiségűt?

Illetve a "get_players( iTs, iNumOfTs, "ce", "T" )" az bugos, csak akkor jó ha szűrsz hozzá az a vagy a b flagra, ezért van másként lekérve.


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 5 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 6 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole