hlmod.hu

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



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: Bing [Bot], Google [Bot] 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  [ 4 hozzászólás ] 
Szerző Üzenet
HozzászólásElküldve: 2017.09.24. 18:33 
Offline
Félisten
Avatar

Csatlakozott: 2016.03.06. 14:20
Hozzászólások: 964
Megköszönt másnak: 102 alkalommal
Megköszönték neki: 134 alkalommal
Sziasztok!

Amit fent említettem a TÉMA NÉV-ben read_argv , equal , equali , && - & használata , (1>>3) , Nos ezekkel az a kérdésem hogy mire is funkcionálnak. mikor használunk && -t vagy csak simán &-t , definálva láttam ezt az (1>>3)-t az mit jelent, az equal és az equali miben másabb, a read_argv (arg) ezeket mire használják?

Aki segít megy a köszönöm (lehet jó részletes leírás is!)

_________________
 ! Moderátori megjegyzés (kiki):
Kérlek csekkold az aláírásra vonatkozó szabályokat!


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2017.09.24. 18:51 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.07. 23:34
Hozzászólások: 2192
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 55 alkalommal
equal, equali -> megnézi hogy két string egyenlő-e annyi különbség van a kettő között hogy az equali az nem veszi figyelembe a kicsi -és nagy betű közötti különbséget

&& <- ifben szokás használni és az 'ÉS'-t jelenti, magyarul mindkét oldalt igaznak kell lennie a feltételnek hogy tovább fusson
Van egy hasznos táblázat hozzá:
false && true -> false
false && false - > false
true && false -> false
true && true -> true
Pl: if(1 == 0) -> false
if(1 == 1) -> true és belép a magba

read_argv -> client_command paramétereit lehet beolvasni

a 3>>1 és a & pedig a bittenkénti eltoláshoz tartozik, arról van Metalnak egy leírása valahol fórumon
EDIT: viewtopic.php?f=55&t=3461 ez sokat fog segíteni

_________________
[sma]CMD:fear(playerid, params[]){ new str[5]; if(!sscanf(params, "s[5]", str)){ if(egyezik(str, "find")) Msg(playerid, "A-a!");}  return 1;}[/sma]

Ők köszönték meg fear_ezmegmi nek ezt a hozzászólást: The Peace (2017.09.24. 19:00)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2017.09.24. 20:57 
Offline
Őskövület
Avatar

Csatlakozott: 2012.02.07. 23:34
Hozzászólások: 2192
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 55 alkalommal
Tudom hogy dupla poszt, de így átláthatóbb.
Néhány példa a bit használatra: (https://forums.alliedmods.net/showthread.php?t=139916 alapján)

ugye általában ha tárolni akarjuk mondjuk, hogy ki admin akkor legtöbbször tömböt használunk
Kód:
new bool:g_bAdmin[33];
public client_putinserver(playerid)
{
   if(is_user_admin(playerid)) g_bAdmin[playerid] = true;
}
public client_disconnect(playerid)
{
   g_bAdmin[playerid] = false;
}

Viszont ez 33*4 byte vagyis 132 byte memóriát használna fel, elég sok egy egyszerű kis booleanhoz nem?
Itt jönnek képbe a bittenkénti operációk

ugyanez a plugin így nézne ki:
Kód:
new g_bAdmin;

public client_putinserver(playerid)
{
   if(is_user_admin(playerid))
      g_bAdmin |= (1 << (id & 31));
}

Na mi is történik itt?
Először is tudni érdemes hogy 4 byte az 32 bitet képes eltárolni (ugye 1 byte = 8 bit)
A játékban a játékos IDk 1től 32ig vannak számozva ezért nem csinálhatunk szimplán 1 << 32t hiszen ha 32vel eltoljuk akkor túlcsordulunk, ezért egy kis trükköt használunk. az id & 31 alapvetőleg a játékosIDjét fogja visszaadni kivéve ha az 32 mert 32&31 = 0, tehát 1től 31ig a rendes számot fogja visszaadni 32nél pedig 0át így pedig tökéletesen elfogunk tudni tárolni mindent ami nekünk kell.

Tehát az 1es értéket (true) eltoljuk mindig a játékos IDvel így maximális slot esetén is kihasználva minden helyet.

Kód:
public client_disconnect( id )
{
    g_bAdmin &= ~( 1 << ( id & 31 ) );
}

Itt pedig egyszerűen ahol ha 1 volt az IDnél akkor 0ra állítjuk majd pedig egy & bit operációval kivonjuk
vagyis:
0000 0000 0000 0000 0000 0000 0100 0100 1 << (id & 31) id = 2
1111 1111 1111 1111 1111 1111 1111 1000 ~(1 << (id & 31))
0000 0000 0000 0000 0000 0000 0100 0000 & ~(1 << (id & 31))
Az elején a 2es és a 6os IDnek volt adminja, így pedig már csak a 6osnak van.

Kód:
if ( g_bAdmin )
ez igazzal tér vissza ha bármelyik helyen van 1es

Másik példa:

van egy változónk amiben fegyvereket tárolunk, jelen esetben hogy azok a fegyverek engedélyezettek-e.
Kód:
new g_weapons;
g_Weapons = ( 1 << CSW_SG550 ) | ( 1 << CSW_AWP ) | ( 1 << CSW_G3SG1 );

eltároljuk az előbb megismert módszerrel őket, majd ha tiltani szeretnénk őket akkor egyszerűen le lehet kérdezni hogy a tiltottak között van-e a fegyver
Kód:
if ( g_Weapons & ( 1 << CSW_AWP ) )

_________________
[sma]CMD:fear(playerid, params[]){ new str[5]; if(!sscanf(params, "s[5]", str)){ if(egyezik(str, "find")) Msg(playerid, "A-a!");}  return 1;}[/sma]

Ők köszönték meg fear_ezmegmi nek ezt a hozzászólást: The Peace (2017.09.27. 15:24)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve: 2017.09.27. 15:24 
Offline
Félisten
Avatar

Csatlakozott: 2016.03.06. 14:20
Hozzászólások: 964
Megköszönt másnak: 102 alkalommal
Megköszönték neki: 134 alkalommal
Ment a köszönöm, még értelmezgetem tényleg köszönöm! :)

_________________
 ! Moderátori megjegyzés (kiki):
Kérlek csekkold az aláírásra vonatkozó szabályokat!


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  [ 4 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 13 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