Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Pole bitowe lepszą alternatywą tablic bitów (objasnenie)


Najlepsza odpowiedź GwynBleidD , 05.11.2013 20:31

Gdy stosujesz bity, nie używasz WCALE tablicy. Jednakże! Uwaga na jedną rzecz... 32 bitowa zmienna ma, jak nazwa wskazuje, 32 bity, tyle samo jest graczy, jednak gracze są numerowani od 1 do 32, a bity od 0 do 31, dlatego musisz używać

if(CheckBit(players, id-1))

Czego benio już nie napisał w tutorialu

Przejdź do postu


  • Zamknięty Temat jest zamknięty
14 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 07:46

W swoim TuTku Benio101 pisze:

 

Kolejną zaletą jest możliwość bardzo sprawnego wyzerowania bitów dla wszystkich graczy:players=0;

zamiast

for(new i=1; i<=32; ++i){    players[i]=false;}

 
Łopatologicznie, używamy:

if(CheckBit(players, id))

zamiast

if(players[id])

przy sprawdzaniu bitu.
 

SetBit(players, id);

zamiast

players[id]=true;

przy ustawianiu bitu na "tak".
 

ClearBit(players, id);

zamiast

players[id]=false;przy ustawianiu bitu na "nie".

 

 

A ja mam pytanie

1.Jak zastosować to do np. takiego perku? Bo tam jest ma_perk[33]?

2.Czy powinno dawać sie [33] czy [32]??

#include <amxmodx>
#include <hamsandwich>
#include <codmod>

#define DMG_BULLET (1<<1)

new const perk_name[] = "Tajemnica Szturmowca";
new const perk_desc[] = "Dostajesz M4A1 i dodatkowe 10 obrazen z niego";

new bool:ma_perk[33];

public plugin_init()
{
        register_plugin(perk_name, "1.0", "QTM_Peyote");
  
        cod_register_perk(perk_name, perk_desc);
        RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}

public cod_perk_enabled(id)
{
        cod_give_weapon(id, CSW_M4A1);
        ma_perk[id] = true;
}

public cod_perk_disabled(id)
{
        cod_take_weapon(id, CSW_M4A1);
        ma_perk[id] = false;
}
  
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
        if(!is_user_connected(idattacker))
                return HAM_IGNORED;
  
        if(!ma_perk[idattacker])
                return HAM_IGNORED;
  
        if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_M4A1 && damagebits & DMG_BULLET)
                cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
          
        return HAM_IGNORED;
}

  • +
  • -
  • 0

#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.11.2013 08:44

Chcesz mieć lub masz serwer 32 slotowy? Masz serwer 32 bitowy? Daruj sobie te bity ^ ^
A jak to stosować? Chyba nie przeczytałeś dokładnie tego co benio tam napisał.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:05

Chcesz mieć lub masz serwer 32 slotowy? Masz serwer 32 bitowy? Daruj sobie te bity ^ ^
A jak to stosować? Chyba nie przeczytałeś dokładnie tego co benio tam napisał.

Należe do ciekawskich, więc pytam czy 33 czy 32

 


A jak to stosować? Chyba nie przeczytałeś dokładnie tego co benio tam napisał.

 

Czytałem to chyba z 8 razy. I dalej nie wiem.

ma_perk[id] = false;

to mam to zamienić na to?:

ClearBit(ma_perk, id);

  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.11.2013 16:13

Chcesz mieć lub masz serwer 32 slotowy? Masz serwer 32 bitowy? Daruj sobie te bity ^ ^
A jak to stosować? Chyba nie przeczytałeś dokładnie tego co benio tam napisał.

Należe do ciekawskich, więc pytam czy 33 czy 32

Ani 33, ani 32.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:17

 

 

Chcesz mieć lub masz serwer 32 slotowy? Masz serwer 32 bitowy? Daruj sobie te bity ^ ^
A jak to stosować? Chyba nie przeczytałeś dokładnie tego co benio tam napisał.

Należe do ciekawskich, więc pytam czy 33 czy 32

 

Ani 33, ani 32.

 

Czy powinno dawać sie [33] czy [32]??
( to pytanie nie jest związane z tutem Benia101)


Użytkownik TibacK edytował ten post 05.11.2013 16:25

  • +
  • -
  • 0

#6 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.11.2013 16:27

A zaraz... Tobie chodzi o to jak po prostu powinno się robić bez tych bitów? Bez bitów dajesz 33-elementową tablicę, a najlepiej dawać MAKSYMALNA_ILOSC_SLOTOW+1, tylko wtedy należy koniecznie pamiętać o tym, przy zwiększaniu liczby slotów, przy zmniejszaniu niby też, ale akurat zmniejszenie liczby slotów nie będzie powodować żadnych błędów.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:30


A zaraz... Tobie chodzi o to jak po prostu powinno się robić bez tych bitów?

Przepraszam, wprowadziłem troche zamętu.

_______________

 

Maxymalna ilosc slotów ?

Przecież get_maxplayers() samo zwieksza i zmniejsza sloty wiec w czym problem?


  • +
  • -
  • 0

#8 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.11.2013 16:33

Przecież get_maxplayers() samo zwieksza i zmniejsza sloty wiec w czym problem?

Spróbuj skompilować coś takiego
new tablica[get_maxplayers()+1];

czy nawet
new ile=20;
new tablica[ile+1];

  • +
  • -
  • 2

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#9 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:38

Aaaa okej czaje...

trzeba zrobic przez

#define SLOTY 32

ale skoro graczy jest 32 to po co jedna dodatkowa komórka?


  • +
  • -
  • 0

#10 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.11.2013 16:41

Dając 32-elementową tablicę, indeksy masz od 0 do 31, a 32 gracz na serwerze potrzebuje 32 indeksu, chyba żebyś zawsze od id gracza odejmował 1, ale po co sobie życie utrudniać?
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#11 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:42

Super. A teraz wróćmy do perku


Czytałem to chyba z 8 razy. I dalej nie wiem.

ma_perk[id] = false;

to mam to zamienić na to?:

ClearBit(ma_perk, id);



  • +
  • -
  • 0

#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 05.11.2013 16:49

Zapraszam

http://amxx.pl/topic...scripting-amxx/

http://amxx.pl/topic...scripting-amxx/

 

https://forums.allie...ead.php?t=94381


  • +
  • -
  • 0

#13 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.11.2013 16:55

Mi chodiz o ten jeden przykład.

I będę wiedział jak stosowac


  • +
  • -
  • 0

#14 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.11.2013 20:31   Najlepsza odpowiedź

Gdy stosujesz bity, nie używasz WCALE tablicy. Jednakże! Uwaga na jedną rzecz... 32 bitowa zmienna ma, jak nazwa wskazuje, 32 bity, tyle samo jest graczy, jednak gracze są numerowani od 1 do 32, a bity od 0 do 31, dlatego musisz używać

if(CheckBit(players, id-1))

Czego benio już nie napisał w tutorialu


  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#15 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 06.11.2013 18:49

czyli np.zamiast ma_perk[33]  daje ma_perk

i aby ustawic na false daje:

ClearBit(ma_perk, id)

??

 

czy moze

ClearBit(ma_perk, id-1)

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych