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

Sprawdzanie czy gracz ma wybrane bronie w plecaku


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
21 odpowiedzi w tym temacie

#1 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 28.05.2011 18:51

*
Popularny

Witam. Przedstawię Wam funkcję, która będzie sprawdzać, czy dany gracz posiada jakąś broń "w plecaku" z kilku podanych, czyli pod uwagę będą brane wszystkie bronie jakie gracz ma przy sobie i jeśli znajdzie przynajmniej jedną broń, to zwróci true.
Można to zrobić na dwa sposóby.

I Sposób
Wygląd funkcji sprawdzającej
stock bool:sprawdz_bronie(id, disallowed) {
new weapons[32], num;
return bool:(get_user_weapons(id, weapons, num) & disallowed);
}

Wykorzystanie stocka
// tworzymy zmienną z id wszystkich broni, które funkcja ma sprawdzić
new disallowed = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG); // możemy tutaj wypisać wszystkie id broni jakie są
// teraz robimy warunek
if(sprawdz_bronie(id, disallowed)) {
// gracz posiada "w plecaku" którąkolwiek broń podaną wyżej
}
else {
// gracz nie ma broni
}

Oczywiście można to zrobić bez zmiennej "disallowed", czyli
if(sprawdz_bronie(id, (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG))) {
// gracz posiada "w plecaku" którąkolwiek broń podaną wyżej
}


II Sposób
Wygląd funkcji sprawdzającej
stock bool:sprawdz_bronie(id, disallowed[], ile = sizeof(disallowed)) {
new weapons[32], num, pwpns, i;
pwpns = get_user_weapons(id, weapons, num);
for(i=0; i<ile; ++i) {
if(pwpns & (1<<disallowed[i]))
return true;
}
return false;
}

Wykorzystanie stocka
// tworzymy tablicę z id wszystkich broni, które funkcja ma sprawdzić
new disallowed[] = { CSW_SCOUT, CSW_XM1014, CSW_MAC10, CSW_AUG } // możemy tutaj wypisać wszystkie id broni jakie są
// teraz robimy warunek
if(sprawdz_bronie(id, disallowed)) {
// gracz posiada "w plecaku" którąkolwiek broń podaną wyżej
}
else {
// gracz nie ma broni
}



Obydwa sposoby można napisać też tak (jeśli musielibyśmy sprawdzać kilka razy, czy gracz posiada jakieś bronie)
new bool:mabronie = sprawdz_bronie(id, (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG));
if(mabronie) {
// gracz posiada "w plecaku" którąkolwiek broń podaną wyżej
}
else {
// gracz nie ma broni
}

Oczywiście można użyć też negacji, czyli
if(!sprawdz_bronie(id, disallowed)) {
// gracz nie ma broni
}

lub (w przypadku tego drugiego)
if(!mabronie) {
// gracz nie ma broni
}

Tutaj -> Nazwy broni i ammo do give_item (+ speed) znajdziecie nazwy i ID wszystkich broni oprócz noża.

Podziękowania dla Knopersa za małą pomoc.
  • +
  • -
  • 8

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


#2 JLB. Leo

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:180
  • Imię:Paweł
  • Lokalizacja:Bielawa
Offline

Napisano 28.05.2011 19:25

Well Done. Przyda się z pewnością, mnóstwo czasu kiedyś straciłem na przeszukanie jak to ma wyglądać.

#3 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 28.05.2011 19:36

myślałem, że jeszcze krócej da się to zrobić


da sie

get_user_weapons i iloczyn bitowy ??
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#4 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 28.05.2011 20:15

albo user_has_weapon(id, CSW_DEAGLE) ??

Użytkownik ^Grzyboo edytował ten post 28.05.2011 20:16

  • +
  • -
  • 0

#5 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 161
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 28.05.2011 20:16

^Grzyboo, to sprawdza nawet jak masz broń w plecaku
  • +
  • -
  • 0

#6 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 28.05.2011 20:47

myślałem, że jeszcze krócej da się to zrobić


da sie

get_user_weapons i iloczyn bitowy ??

Czyli jednak... Ale niby jak iloczyn bitowy? Bo dużo mi to nie mówi.
  • +
  • -
  • 0

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


#7 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 28.05.2011 22:28

user_has_weapon działa prawdopodobnie tak samo jak to, więc szukanie kilku broni lepiej zrobić w jednej pętli (powyższy stock), ale sprawdzenie jednej zostawić natywnej funkcji

mam taką małą uwagę implementacyjną, nagłówek tej funkcji może wyglądać tak
stock bool:sprawdz_bronie(id, disallowed[], ile = sizeof disallowed)
i nieco ułatwi jej używanie
  • +
  • -
  • 0

#8 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 28.05.2011 22:45

Nie bardzo wiem w czym to będzie ułatwiać, ale skoro tak, to pewnie tak jest ^ ^ Ogólnie poprawiłem trochę nazwę tematu, itp. bo możliwe, że na początku nazwa nie była zbyt dobrze dobrana, źle to ująłem ;]
  • +
  • -
  • 0

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


#9 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 28.05.2011 22:48

no że ile sam sobie przypisze wielkość tablicy i wystarczy podać tylko 2 pierwsze argumenty :)
  • +
  • -
  • 1

#10 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 28.05.2011 22:50

A to już rozumiem :D Post poprawiony jeszcze raz.
  • +
  • -
  • 0

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


#11 GoldeN

    Wszechmogący

  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 29.05.2011 00:55

Co do nagłówka funkcji to nie najlepiej zrobić tak:

stock bool:sprawdz_bronie(id, disallowed[]) {
new weapons[32], num, bool:has = false;
get_user_weapons(id, weapons, num);
for(new i=0; i<num; i++) {
for(new o=0; o<sizeof(disallowed); o++) {
if(weapons[i] == disallowed[o]) {
has = true;
break;
}
}
if(has) break;
}
return has;
}


Wyjdzie na to samo a nagłówek krótszy. ;d

#12 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 29.05.2011 10:42

Tak Ci się nie skompiluje ;] Bo właśnie tak próbowałem na samym początku. Znaczy skompiluje, ale z ostrzeżeniem, więc tak jak teraz jest dobrze.

Użytkownik sebul edytował ten post 29.05.2011 10:45

  • +
  • -
  • 0

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


#13 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 29.05.2011 12:15

new wpns[32], num, pwpns;

pwpns = get_user_weapons(id,wpns,num)



if (pwpns&(1<<CSW_DEAGLE)) //Gosc ma deagle'a

  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#14 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 29.05.2011 12:55

Ale to będzie sprawdzać pojedynczo, a mi chodzi o takie coś, że podaje się kilka broni i wtedy sprawdza, czy dana osoba ma choć jedną.
  • +
  • -
  • 0

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


#15 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 29.05.2011 13:00

przeciez to samo mozna bitowo zrobic :D
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#16 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 29.05.2011 16:03

Czyli coś takiego?
stock bool:sprawdz_bronie(id, disallowed[], ile = sizeof(disallowed)) {
new weapons[32], num, pwpns, bool:has = false;
pwpns = get_user_weapons(id, weapons, num);
for(new i=0; i<ile; i++) {
if(pwpns & (1<<disallowed[i])) {
has = true;
break;
}
}
return has;
}

Tylko to mi przyszło do głowy ^^
  • +
  • -
  • 0

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


#17 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 161
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 29.05.2011 18:03

może tak:


if(sprawdz_bronie(id, CSW_USP))
{
//ma usp
}
else
{
//nie ma
}


stock bool:sprawdz_bronie(id, disallowed)
{
new weapons[32], num;
return (get_user_weapons(id, weapons, num) & (1<<disallowed))? true: false
}

  • +
  • -
  • 0

#18 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 29.05.2011 18:12

Ale teraz to co podałeś, to tym bardziej jest to sprawdzanie, czy grać ma jedną broń, a założenie jest takie, aby sprawdzić, czy gracz ma choć jedną broń z kilku podanych.

Dodano 29 maj 2011 - 20:27:
Dobra, przetestowałem i rzeczywiście ten drugi kod co napisałem też działa, jest krócej, to dodałem do pierwszego postu.

Użytkownik sebul edytował ten post 29.05.2011 19:29

  • +
  • -
  • 0

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


#19 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 29.05.2011 20:06

mialem na mysli zrobienie tego troche inaczej a mianowicie zrobienie sumy bitowej dla zestawu i porownanie jej z wynikiem get_user_weapons i zrobienie iloczynu bitowego jesli w wyniku iloczynu pozostala jakas 1 to gosc ma bron :D
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#20 sebul

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 29.05.2011 20:10

Nie rozumiem to co tutaj piszesz ^ ^ :D Jak wiesz jak to napisać jeszcze inaczej i może lepiej, to napisz, bo ja na sumach bitowych się nie znam ;/
  • +
  • -
  • 0

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





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

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