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
 

plx211 - zdjęcie

plx211

Rejestracja: 08.02.2015
Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.04.2019 20:43
****-

#722581 Informacja, opis znajdź sposób.

Napisane przez plx211 w 10.03.2016 08:58

Masz nastepujace mozliwosci:

MOTD (napisales poprzez stronę www dlatego linux zapewnne ci go nie polecil)
Zalety:
- najwieksza mozliwa ilosc danych do wyswietlenia
- mozliwosc formatowania przy pomocy html + css

Wady:
- na csgo sa problemy z odpaleniem, kiedys trzeba bylo wykonac maly trick, nie wiem jak jest teraz
- dosc dlugo sie wlacza
- zaslania prawie caly ekran

Hudcenter:
Zalety:
- nie zaslania tak bardzo ekranu gry (zalezy od ustawiebia skali gui w ustawieniach clienta)
- mozliwosc uzywanua niektorych znacznikow html (na przyklad kolor fontu)
- mozliwosc wywolywania co x czasu uzyskujac cos na krztalt hudmsg z 1.6

Wady:
- ograniczona ilosc znakow
- po pomniejszeniu czcionki maksymalnie 5 linijek moze wyswietlic

Menu:
Zalety:
- lezy w wygodnym miejscu do czytania
- moze nawet calkiem duzo danych pomiescic
- mozna rozbic dane na kilka stron

Wady:
- czasami jest opuznienie w wyswietleniu menu/zmiannie strony
- zbyt duza ilosc textu w jednej linij denerwuje
- blokuje klawisze nuneryczne (jak jest wlaczone nie mozesz np. [1] zmienic broni)
- brak mozliwosci zmianny kolorow (mozna ustaeic dana linije na pomaranczowo lub szaro)

Czat:
Zalety:
- mozliwoac uzycia kolorow (colorchat, ale jest ich chyba z 10 tylko)
- moze przechowac duza ilosc danych

Wady:
- przy duzej ilosci graczy utrudnione czytanie

Konsola:
To samo co czat tylko bez kolorow

Sprite:
Zalety:
- mozliwosc wstawienia obrazkow

Wady:
- trzeba sie nagimnastykowac (sprite wyswietla jedynie obrazki)
- przy duzej ilosci ciezko z wydajnoscia

Pisane z pamieci i z telefonu
  • +
  • -
  • 2


#722553 Użycie aktywnego skilla prawym przyciskiem myszki.

Napisane przez plx211 w 09.03.2016 20:01

plugin.sp(79) : warning 215: expression has no effect

linija 79

warning -> ostrzezenie

215 -> numer bledu

expression has no effect -> wyrazenia nie ma efektu

 

a teraz do sedna

to nie ma sensu:

if ((buttons & IN_ATTACK) == IN_ATTACK2) 

to:

OnUltimateCommand();

po przerobieniu na:

(OnUltimateCommand);

nic nie zmiennia (po za tym ze wczesniejszy blad, nie byl WTF?!'em),

zadeklarowana funkcjia:

public OnUltimateCommand(client, race, bool:pressed)

oznacza ze:

public -> ma byc "widoczna z zewnatrz"

OnUltimateCommand -> mamy do niej sie tak odwolywac

WYMAGA NASTEPUJACYCH PARAMETRYOW:

  • client
  • race
  • pressed (typu bool)

Polecam ci troche poczytaj o pisaniu pod SM (nie stety jestes skazany na Angielski),

Trzymaj:

bool buttonState[MAXPLAYERS + 1] = {false, ...};

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float[3] vel, float[3] angles, int &weapon) {
  if (buttons & IN_ATTACK2) {
    if (!buttonState[client]) {
      buttonState[client] = true;
      OnUltimateCommand(client, {zmien_mnie}, true)
    }
  } else {
    if (buttonState[client]) {
      buttonState[client] = false;
      OnUltimateCommand(client, {zmien_mnie}, false)
    }
  }

  return Plugin_Continue;
}

public OnUltimateCommand(client, race, bool:pressed) {
  // ...
}

Powyzszy kod napisalem przypuszczajac.

Twojm zadaniem jest:

Ustalenie co powinno byc wpisane jako parametr race,

Jak juz ustalisz musisz zamienic {zmien_mnie} na to co ustaliles.

 

good luck ;)

 


  • +
  • -
  • 1


#721287 VPS do 2 serwerów CS:GO

Napisane przez plx211 w 22.02.2016 14:58

To zapomnij o serverze.
Vps na prawde sie nie nadaje.
Podaj jaki masz budzet (oraz sposob platnosci), to doradze ci kilka trickow jak dostac taniej dedyka ;)
  • +
  • -
  • 1


#720531 CodMod_Stary - W pelni odwzorowany cod do CS:GO

Napisane przez plx211 w 13.02.2016 20:49

@rekowiesz

jest wile czynikow 3, nie jest mozliwe aby w 100% wylapac wszystkie bledy, moge cie zapewnic ze @Linux' testowal plugin dluzej ;)

jesli chcesz aby bug zostal naprawiony, mozesz:

  • sam naprawic blad (jak to zrobisz, milo by bylo gdybys udostepnil to dla innych, tak w dobrym duchu OpenSource :D )
  • dostarczyc jak najwiecej danych kiedy sie to dzieje, aby osoba ktora sie za to wezmie mogla szybko znalezc ten blad ;)

jesli nie znasz sie na programowaniu/skryptowaniu polecam ci 2 opcjie

 

p.s.

jesli podejmiesz sie 2 opcji, nie zapomnij dac zrzutu bazy :)


  • +
  • -
  • 1


#717404 [Assembler] Nieskończona pętla z opóźnieniem

Napisane przez plx211 w 03.01.2016 15:05

malo pisalem w asm, ale nieskonczona petle uzyskasz przez skoki:

infinity:
;kod
jmp infinity

co do opóźnienia, to jedyne co mi przychodzi to sprawdzanie czasu i wykonywanie odpowiedniego skoku


  • +
  • -
  • 1


#716782 Methodmap

Napisane przez plx211 w 25.12.2015 16:01

Wprowadzenie



Methodmap'y są jedną z nowości wprowadzonych w sm 1.7, służą one do mapowania funkcji (jak sama nazwa wskazuje). Pozwalają one nam na abstrakcyjne myślenie, zobaczmy poniższy przykład.

Ten kod odpowiada za stworzenie menu wyboru z opcjami Tak i Nie:

Handle menu = CreateMenu(MenuHandler1);
SetMenuTitle(menu, "Czy przeczytałeś to na AMXX.PL?");
AddMenuItem(menu, "yes", "Yes");
AddMenuItem(menu, "nie", "Nie");
SetMenuExitButton(menu, false);
DisplayMenu(menu, client, 20);

Ten sam kod z użyciem methodmap możemy zapisać tak:

Menu menu = new Menu(MenuHandler1);
menu.SetTitle("Czy przeczytałeś to na AMXX.PL?");
menu.AddItem("tak", "Tak");
menu.AddItem("nie", "Nie");
menu.ExitButton = false;
menu.Display(client, 20);

Od razu widać że kod jest czytelniejszy


Budowa Methodmap



Definiowanie methodmap jest podobne do definiowania enum'a:

methodmap Nazwa {
    //...
};

Tak samo się tworzy zmienną typu methodmap:

Nazwa zmienna;

Funkcje methodmap



Jeśli się przyjrzymy zobaczymy że definicja funkcji z methodmap prawie w ogóle nie różni się od zwykłej funkcji (po za tym gdzie się znajdują).

methodmap Nazwa {
    /...

    public void funkcja() {
        PrintToServer("Wywołano funkcje z methodmap Nazwa");
    }
    
    /...
};

Różnica natomiast od razu jest odczuwalna gdy chcemy wywołać funkcje, gdyż wpierw musimy stworzyć "obiekt"

Nazwa zmienna;
zmienna.funkcja();

Setter i Getter



Nie ma możliwości aby w methodmap utworzyć zmienną, możemy natomiast utworzyć pseudo zmienną. Czym to się różni od zwykłej zmiennej? Tym że zamiast bezpośrednich operacjach na zmiennej są wywoływane 2 funkcjie:

  • setter - kiedy wartość do pseudo zmiennej jest zapisywana
  • getter - kiedy wartość z pseudo zmiennej jest odczytywana

Przykład:

int zmiennaPozaMethodmap;

methodmap Nazwa {
    /...

    property int zmienna {
        public get() {
               return zmiennaPozaMethodmap;
        }

        public set(int wartosc) {
                zmiennaPozaMethodmap = wartosc;
        }
    }

    /...
};

A teraz opis przykłądu:

property int zmienna
  • property - informujemy kompilator że tworzymy pseudo zmienną
  • int - jakiego typu jest pseudo zmienna
  • zmienna - nazwa pseudo zmiennej

Budowa gettera jest taka sama jak zwykłej funkcji, ma natomiast narzucone kilka rzeczy:

  • nie przyjmuje on żadnych argumentów
  • zawsze musi wywołać funkcje return
  • zwraca typ taki jaki był podany przy 'property' (dlatego nie musimy podawać typu zwracanego, jak w normalnej funkcji)
  • musi się nazywa się get

Przykład gettera:

int zmiennaPozaMethodmap;

methodmap Nazwa {
    /...

    property int zmienna {
        public get() {
               return zmiennaPozaMethodmap;
        }
    }

    /...
};

Krótki opis:

  • public get() - tworzymy getter dla zmiennej
  • return zmiennaPozaMethodmap; - zwraca zmienną 'zmiennaPozaMethodmap'

Teraz czas przyszedł na setter, jego budowa także jest podobna do normalnej funkcji, i tak samo jak getter ma narzucone kilka rzeczy:

  • nie zwraca żadnej wartości
  • przyjmuje tylko 1 argument
  • musi się nazywać set

Przykład settera:

int zmiennaPozaMethodmap;

methodmap Nazwa {
    /...

    property int zmienna {
        public set(int wartosc) {
                zmiennaPozaMethodmap = wartosc;
        }
    }

    /...
};

Krótki opis:

  • public set(int wartosc) - tworzymy setter z wejściem dla argumentu typu 'int' o nazwie 'wartosc'
  • zmiennaPozaMethodmap = wartosc; - ustawiamy zmiennej 'zmiennaPozaMethodmap' wartość zmiennej 'wartosc'

Jak pisałem wcześniej getter służy do pobierania wartości a setter do ustawiania, dlatego poniższy zapi jest logiczny

Nazwa mojMethodmap;
mojMethodmap.zmienna = 20; //setter - ustawiamy wartość 20
PrintToChat(client, "zmienna = %d", mojMethodmap.zmienna); //getter - pobieramy wartość (w tym przypadku 20)

Alias



Jeśli chcemy stworzyć alias (tak naprawdę twórcy nazywają to "inline method", ale dla zobrazowania będę to nazywał alias'em) na jakąś funkcje możemy zrobić to w szybki sposób, poniższy przykład powinien to zilustrować:

public void innaFunkcja() {
    PrintToServer("Wywołano innaFunkcje");
}

methodmap Nazwa {
    /...
    
    public void funkcja = innaFunkcja;

    /...
};

Jak widać różnicą między zwykłą funkcją są od razu zauważane, parametry funkcji zostają bez zmian dlatego znikły '(' i '),' znaki '{' oraz '}' zostały zastąpione przez '=' ponieważ podczas kompilacji 'funkcja' zostanie zamieniona na 'innaFunkcja' a nie wywołana z funkcji 'funkcja'

Alias wywołuję się tak samo jak zwykłą funkcjie:

Nazwa mojMethodmap;
mojMethodmap.funkcja();

Dziedziczenie



Po co pisać 2 razy to samo? Właśnie tutaj z pomocą przychodzi nam dziedziczenie, ale co tutaj pisać, najlepiej to zilustruje poniższy przykład:
 

methodmap Rodzic {
    public void funkcja() {
        PrintToServer("fun1");
    }
};

methodmap Dziecko < Rodzic {
    public void innaFunkcja() {
        PrintToServer("fun2");
    }

};

Jak widać powyżej zapis dziedziczenia wygląda następująco:

methodmap nazwa < od_kogo_dziedziczy

Dzięki dziedziczeniu możemy w methodmap'ie 'Dziecko' wywołać funkcje z methodmap'y 'Rodzic', ale na odwrót już nie (wywali błąd przy kompilacji)

Magiczne this



Pisałem wcześniej że methodmap nie ma zmienych, nie jest to do końca prawda, ponieważ ma 1 zmieną która jest w każdym methodmap, a mianowicie zmienną this, nie potrafię tego zbytnio wyjaśnić dlatego może przykład wam to bardziej przybliży :)

int jakasZmienna = 211;

methodmap Nazwa {
    property int zmienna {
        public get() {
            return jakasZmienna;
        }
    }
    public void funkcja() {
        PrintToServer("this wynosi = %d", this");
        PrintToServer("zmienna wynosi = %d", this.zmienna); //gdyby nie było this szukało by zmiennej po za methodmap
    }
};

...

Nazwa mojMethodmap = view_as<Nazwa>(3); //trzeba this jest typu Nazwa, więcej o view_as znajdziesz w poradniku o składni
mojMethodmap.funkcja(); //Wypisze "this wynosi = 3" oraz "zmienna wynosi = 211"

Methodmap a enum



Jedną z głównych zalet methodmap jest to że może służyć jako rozszerzenie enum'a, wystarczy że będą miały taką samą nazwę:

enum Nazwa {
    PIERWSZY = 0,
    DRUGI = 1,
    TRZECI = 2
};

Methodmap Nazwa {
    public bool jestPierwszy() {
        return this == PIERWSZY;
    }
};

...

Nazwa varA = PIERWSZY;
Nazwa varB = TRZECI;

PrintToServer("%s", varA.jestPierwszy() ? "tak" : "nie"); // wypisze "tak", więcej na temat {wyrazenie} ? {prawda} : {fałsz} znajdziecie w opisie składni
PrintToServer("%s", varB.jestPierwszy() ? "tak" : "nie"); // wypisze "nie"

Daję to nam też dodatkową korzyść, zobaczmy ten przykład:

methodmap AdminId {
    public int pobierzFlagi() {
        return GetAdminFlags(this);
    }
};

...

GetPlayerAdmin(id).pobierzFlagi();

Na pierwszy rzut oka może wydać się to nie zrozumiałe, już tłumaczę dlaczego możemy skrócić kod takim zapisem:

  • w bibliotece admin istnieje enum o nazwie 'AdminId'
  • funkcja 'GetPlayerAdmin' zwraca wartość o type AdminId

Powyższy kod jest równo znaczny z poniższymi:

GetAdminFlags(GetPlayerAdmin(id));

//oraz

AdminId zmienna = GetPlayerAdmin(id);
zmienna.pobierzFlagi();

Konstruktor i Dekonstruktor



Powinienem o tym wspomnieć wcześniej, ale postanowiłem to zostawić na później.
Konstruktor wywołuję się przy tworzeniu "obiektu", a dekonstruktor przy jego usuwaniu. O to cała filozofia, a teraz zobaczmy na kod:

methodmap Nazwa {
    public Nazwa() {
        PrintToServer("Konstruktor Nazwa");
    }

    public ~Nazwa() {
        PrintToServer("Dekonstruktor Nazwa");
    }
};

Od razu widać że konstruktor musi mieć taką samą nazwę jak methodmap, należy też dodać że może on przyjąć jakieś parametry oraz że zwraca wartość o typie methodmap'y.
Budowę dekonstruktora ma prawie taka sama nazwę funkcji jak konstruktor, tylko że na początek musimy dać znak '~', w przeciwieństwie do konstruktora nie zwraca żadnej wartości oraz nie przyjmuje żadnych parametrów.
Zatem przetestujmy:

Nazwa mojMethodmap = Nazwa();
PrintToServer("amxx.pl");
delete mojMethodmap;

powyższy kod zwróci nam:

Konstruktor Nazwa
amxx.pl
Dekonstruktor Nazwa

__nullable__



Zbyt dużo o '__nullable__' nie znajdziemy w sieci, służy to do powiadomienia kompilatora że methodmap nie przyjmuję żadnej wartości (czyli jest null'em), zastosowanie go wymusza od nas użycia new, więcej zobaczycie w poniższym przykładzie:

methodmap Nazwa _nullable__ {
    public Nazwa() {
        /...
    }

};

...

Nazwa mojMethodmap = new Nazwa();

Methodmap a obiektowość



Specjalnie wczęsniej słowo obiekt brałem w cudzysłowie, ponieważ sourcepawn 1.7 nadal NIE JEST OBIEKTOWE.
Jeśli nazwali byśmy methodmap klasą, to byśmy zobaczyli że wszystkie funkcje (a raczej metody) oraz 'zmienne' należą do klasy a nie do obiektu (z wyjątkiem this)


  • +
  • -
  • 6


#716695 Jak zrobić żeby na mapach _mg wczytywało config xyz a na innych mapach config...

Napisane przez plx211 w 24.12.2015 14:37

https://forums.allie...ead.php?t=69506
  • +
  • -
  • 1


#716278 Błąd w formularzu

Napisane przez plx211 w 15.12.2015 21:44

to jest 17 linija:

$do_zapisania='$nick1.' '.$nick2.' '.$tag.' '.$link1.' '.$link2.' '.$dodatkowe.';//7

raczej powinno byc

$do_zapisania = $nick1 . ' ' . $nick2 . ' ' . $tag . ' ' . $link1 . ' ' . $link2 . ' ' . $dodatkowe; //7

polecam ci edytor z podswietlona skladnia (np. atom.io, geany lub notepad++), takie bledy duzo szybcjiej wylapiesz ;)


  • +
  • -
  • 1


#716224 [ROZWIĄZANE] Funkcja w funkcji

Napisane przez plx211 w 14.12.2015 10:52

Odpusc sobie to.
Podobby efekt uzyskasz uzywajac static (sprawia to ze funkcje/zmienne sa widoczne tylko w pliku w ktoryn sa zadeklarowane)

Pisane z fona
  • +
  • -
  • 1


#716182 Headshoot

Napisane przez plx211 w 13.12.2015 14:30

Przetestuj to:
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{ 
    if(!IsValidClient(attacker))
        return Plugin_Continue;
 
    if(active[attacker] && (damagetype & CS_DMG_HEADSHOT)) {
        SetEntProp(victim, Prop_Data, "m_ArmorValue", 0, 1);
        damage = float(GetClientHealth(victim) + 1);
        return Plugin_Changed;
    }

    return Plugin_Continue;
}

  • +
  • -
  • 1


#716140 Lista broni

Napisane przez plx211 w 12.12.2015 20:00

W sumie miało to być opublikowane wraz z innymi przetłumaczonymi poradnikami z allied'ów, ale po zobaczeniu tematu Droso postanowiłem zapodać.
Mam nadzieje że oba tematy (ten i http://amxx.pl/topic...wy-jako-zmienne) idealnie się uzupełnią.
 
Lista z dnia: 15.10.2015

Na liście nie ma revolveru, później go dodam ;)
 

Legenda


  • Nazwa - Polska nazwa broni/itemu
  • Alias - Nazwa zwracana przez event, w zależności od eventu może być inna, np. weapon_knife_t dla eventu item_equip zwraca knife, natomiast dla eventu player_death zwraca knife_t. Większość na liście pochodzi z eventu player_death
  • CSWeaponID - Wartość uzyskana przy pomocy aliasu i funkcji CS_AliasToWeaponID, funkcja zwraca enum CSWeaponID który możemy znaleźć w bibliotece cstrike.inc
  • GetClientWeapon - Wynik funkcji GetClientWeapon
  • Classname - Nazwa potrzebna do przywołania broni przy pomocy GivePlayerItem

P.S.

CSWeapon_NONE jest zwracany gdy nie można dopasować aliasu do danej broni, jak pisałem wcześniej różne eventy zwracają różne wartości które zapewne nie są umieszczone na "liście broni" biblioteki/modułu cstrike silnika SM ;)

Noże


+=================+==================+===================+=================+=========================+
|      Nazwa      |      Alias       |    CSWeaponID     | GetClientWeapon |        Classname        |
+=================+==================+===================+=================+=========================+
| Nóż terro       | knife_t          | CSWeapon_NONE     | weapon_knife    | weapon_knife_t          |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż ct          | knife_default_ct | CSWeapon_NONE     | weapon_knife    | weapon_knife            |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Bagnet          | bayonet          | CSWeapon_NONE     | weapon_knife    | weapon_bayonet          |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż z hakiem    | knife_gut        | CSWeapon_NONE     | weapon_knife    | weapon_knife_gut        |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż składany    | knife_flip       | CSWeapon_NONE     | weapon_knife    | weapon_knife_flip       |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Bagnet m9       | knife_m9_bayonet | CSWeapon_NONE     | weapon_knife    | weapon_knife_m9_bayonet |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Karambit        | knife_karambit   | CSWeapon_NONE     | weapon_knife    | weapon_knife_karambit   |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż łowcy       | knife_tactical   | CSWeapon_NONE     | weapon_knife    | weapon_knife_tactical   |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż motylkowy   | knife_butterfly  | CSWeapon_NONE     | weapon_knife    | weapon_knife_butterfly  |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Nóż falcjon     | knife_falchion   | CSWeapon_NONE     | weapon_knife    | weapon_knife_falchion   |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Złoty nóż gg    | knifegg          | CSWeapon_KNIFE_GG | weapon_knifegg  | weapon_knifegg          |
+-----------------+------------------+-------------------+-----------------+-------------------------+
| Sztylety Cienia | knife_push       | CSWeapon_NONE     | weapon_knife    | weapon_knife_push       |
+-----------------+------------------+-------------------+-----------------+-------------------------+

Pistolety


+=================+==================+==================+==================+=====================+
|      Nazwa      |      Alias       |    CSWeaponID    | GetClientWeapon  |      Classname      |
+=================+==================+==================+==================+=====================+
| Glock           | glock            | CSWeapon_GLOCK   | weapon_glock     | weapon_glock        |
+-----------------+------------------+------------------+------------------+---------------------+
| Dwie Berrety    | elite            | CSWeapon_ELITE   | weapon_elite     | weapon_elite        |
+-----------------+------------------+------------------+------------------+---------------------+
| P2000           | hkp2000          | CSWeapon_HKP2000 | weapon_hkp2000   | weapon_hkp2000      |
+-----------------+------------------+------------------+------------------+---------------------+
| P250            | p250             | CSWeapon_P250    | weapon_p250      | weapon_p250         |
+-----------------+------------------+------------------+------------------+---------------------+
| Tec-9           | tec9             | CSWeapon_TEC9    | weapon_tec9      | weapon_tec9         |
+-----------------+------------------+------------------+------------------+---------------------+
| Desert Eagle    | deagle           | CSWeapon_DEAGLE  | weapon_deagle    | weapon_deagle       |
+-----------------+------------------+------------------+------------------+---------------------+
| USP             | usp_silencer     | CSWeapon_HKP2000 | weapon_hkp2000   | weapon_usp_silencer |
+-----------------+------------------+------------------+------------------+---------------------+
| USP bez tłumika | usp_silencer_off | CSWeapon_HKP2000 | weapon_hkp2000   | weapon_usp_silencer |
+-----------------+------------------+------------------+------------------+---------------------+
| Fivesevent      | fiveseven        | CSWeapon_ELITE   | weapon_fiveseven | weapon_fiveseven    |
+-----------------+------------------+------------------+------------------+---------------------+
| CZ75-Auto       | cz75a            | CSWeapon_P250    | weapon_p250      | weapon_cz75a        |
+-----------------+------------------+------------------+------------------+---------------------+

Ciężkie


+========+==========+===================+=================+=================+
| Nazwa  |  Alias   |    CSWeaponID     | GetClientWeapon |    Classname    |
+========+==========+===================+=================+=================+
| Nova   | nova     | CSWeapon_NOVA     | weapon_nova     | weapon_nova     |
+--------+----------+-------------------+-----------------+-----------------+
| Xm1014 | xm1014   | CSWeapon_XM1014   | weapon_xm1014   | weapon_xm1014   |
+--------+----------+-------------------+-----------------+-----------------+
| Obrzyn | sawedoff | CSWeapon_SAWEDOFF | weapon_sawedoff | weapon_sawedoff |
+--------+----------+-------------------+-----------------+-----------------+
| MAG7   | mag7     | CSWeapon_MAG7     | weapon_mag7     | weapon_mag7     |
+--------+----------+-------------------+-----------------+-----------------+
| M249   | m249     | CSWeapon_M249     | weapon_m249     | weapon_m249     |
+--------+----------+-------------------+-----------------+-----------------+
| Negev  | negev    | CSWeapon_NEGEV    | weapon_negev    | weapon_negev    |
+--------+----------+-------------------+-----------------+-----------------+

Pistolety maszynowe


+========+=======+================+=================+==============+
| Nazwa  | Alias |   CSWeaponID   | GetClientWeapon |  Classname   |
+========+=======+================+=================+==============+
| MP9    | mp9   | CSWeapon_MP9   | weapon_mp9      | weapon_mp9   |
+--------+-------+----------------+-----------------+--------------+
| MP7    | mp7   | CSWeapon_MP7   | weapon_mp7      | weapon_mp7   |
+--------+-------+----------------+-----------------+--------------+
| UMP-45 | ump45 | CSWeapon_UMP45 | weapon_ump45    | weapon_ump45 |
+--------+-------+----------------+-----------------+--------------+
| P90    | p90   | CSWeapon_P90   | weapon_p90      | weapon_p90   |
+--------+-------+----------------+-----------------+--------------+
| Bizon  | bizon | CSWeapon_BIZON | weapon_bizon    | weapon_bizon |
+--------+-------+----------------+-----------------+--------------+
| MAC10  | mac10 | CSWeapon_MAC10 | weapon_mac10    | weapon_mac10 |
+--------+-------+----------------+-----------------+--------------+

Karabiny


+====================+===================+==================+=================+======================+
|       Nazwa        |       Alias       |    CSWeaponID    | GetClientWeapon |      Classname       |
+====================+===================+==================+=================+======================+
| Galil              | galilar           | CSWeapon_GALILAR | weapon_galilar  | weapon_galilar       |
+--------------------+-------------------+------------------+-----------------+----------------------+
| Ak-47              | ak47              | CSWeapon_AK47    | weapon_ak47     | weapon_ak47          |
+--------------------+-------------------+------------------+-----------------+----------------------+
| SG553              | sg556             | CSWeapon_SG556   | weapon_sg556    | weapon_sg556         |
+--------------------+-------------------+------------------+-----------------+----------------------+
| SSG-08             | ssg08             | CSWeapon_SSG08   | weapon_ssg08    | weapon_ssg08         |
+--------------------+-------------------+------------------+-----------------+----------------------+
| AWP                | awp               | CSWeapon_AWP     | weapon_awp      | weapon_awp           |
+--------------------+-------------------+------------------+-----------------+----------------------+
| G3SG1              | g3sg1             | CSWeapon_G3SG1   | weapon_g3sg1    | weapon_g3sg1         |
+--------------------+-------------------+------------------+-----------------+----------------------+
| M4A4               | m4a1              | CSWeapon_M4A1    | weapon_m4a1     | weapon_m4a1          |
+--------------------+-------------------+------------------+-----------------+----------------------+
| M4A1-S             | m4a1_silencer     | CSWeapon_M4A1    | weapon_m4a1     | weapon_m4a1_silencer |
+--------------------+-------------------+------------------+-----------------+----------------------+
| M4A1-S bez tłumika | m4a1_silencer_off | CSWeapon_NONE    | weapon_m4a1     | weapon_m4a1_silencer |
+--------------------+-------------------+------------------+-----------------+----------------------+
| SCAR-20            | scar20            | CSWeapon_SCAR20  | weapon_scar20   | weapon_scar20        |
+--------------------+-------------------+------------------+-----------------+----------------------+

Granaty


+====================+==============+=======================+=====================+=====================+
|       Nazwa        |    Alias     |      CSWeaponID       |   GetClientWeapon   |      Classname      |
+====================+==============+=======================+=====================+=====================+
| ZEUS               | taser        | CSWeapon_TASER        | weapon_taser        | weapon_taser        |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Granat wybuchowy   | hegrenade    | CSWeapon_HEGRENADE    | weapon_hegrenade    | weapon_hegrenade    |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Granat zapalający  | incgrenade   | CSWeapon_INCGRENADE   | weapon_incgrenade   | weapon_incgrenade   |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Granat oślepiający | flashbang    | CSWeapon_FLASHBANG    | weapon_flashbang    | weapon_flashbang    |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Wabik              | decoy        | CSWeapon_DECOY        | weapon_decoy        | weapon_decoy        |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Granat dymny       | smokegrenade | CSWeapon_SMOKEGRENADE | weapon_smokegrenade | weapon_smokegrenade |
+--------------------+--------------+-----------------------+---------------------+---------------------+
| Mołotow            | molotov      | CSWeapon_MOLOTOV      | weapon_molotov      | weapon_molotov      |
+--------------------+--------------+-----------------------+---------------------+---------------------+

Inne


+=========+=======+=============+=================+==============+
|  Nazwa  | Alias | CSWeaponID  | GetClientWeapon |  Classname   |
+=========+=======+=============+=================+==============+
| C4      | c4    | CSWeapon_C4 | weapon_c4       | weapon_c4    |
+---------+-------+-------------+-----------------+--------------+
| Kevlar  |       |             |                 | item_kevlar  |
+---------+-------+-------------+-----------------+--------------+
| Defuser |       |             |                 | item_defuser |
+---------+-------+-------------+-----------------+--------------+

  • +
  • -
  • 4


#715819 Problem z Advertisments

Napisane przez plx211 w 07.12.2015 08:15

configs/

  • +
  • -
  • 1


#715149 hook +use

Napisane przez plx211 w 24.11.2015 14:42

Pierwsze testowane, reszta nie :)

Wszystkie dadzą wynik:

start +use
+use
+use
+use
+use
+use
stop +use

Różnią się prawdopodobnie częstotliwością.

 

1) OnPlayerRunCmd

#include <sourcemod>

bool useState[MAXPLAYERS+1] = {false, ...};

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float[3] vel, float[3] angles, int &weapon) {
  if (buttons & IN_USE) {
    if (!useState[client]) {
        useState[client] = true;
        PrintToChat(client, "start +use");
    }
  } else {
    if (useState[client]) {
      useState[client] = false;
      PrintToChat(client, "stop +use");
    }
  }
  
  
  if (buttons & IN_USE) {
    PrintToChat(client, "+use");
  }
  
  return Plugin_Continue;
}

2) OnGameFrame

#include <sourcemod>

bool useState[MAXPLAYERS+1] = {false, ...};

public void OnGameFrame() {
  for (int client = 1; client <= MaxClients; client++) {
    if (isValidClient(client)) {
      if (GetClientButtons(client) & IN_USE) {
        if (!useState[client]) {
          useState[client] = true;
          PrintToChat(client, "start +use");
        }
      } else {
        if (useState[client]) {
          useState[client] = false;
          PrintToChat(client, "stop +use");
        }
      }

      if (GetClientButtons(client) & IN_USE) {
        PrintToChat(client, "+use");
      }
    }
  }
}

stock bool isValidClient(int client) {
    if (!( 1 <= client <= MaxClients ) || !IsClientInGame(client)) 
        return false; 
    return true; 
}

3) PreThink

#include <sourcemod>

bool useState[MAXPLAYERS+1] = {false, ...};

public void OnClientPutInServer(int client) {
  SDKHook(client, SDKHook_PreThink, preThink);
}

public void OnClientDisconnect(int client) {
  SDKUnhook(client, SDKHook_PreThink, preThink);
}

public void preThink(int client) {
  if (GetClientButtons(client) & IN_USE) {
    if (!useState[client]) {
      useState[client] = true;
      PrintToChat(client, "start +use");
    }
  } else {
    if (useState[client]) {
      useState[client] = false;
      PrintToChat(client, "stop +use");
    }
  }

  if (GetClientButtons(client) & IN_USE) {
    PrintToChat(client, "+use");
  }  
}

stock bool isValidClient(int client) {
    if (!( 1 <= client <= MaxClients ) || !IsClientInGame(client)) 
        return false; 
    return true; 
}

  • +
  • -
  • 1


#715071 Odczyt treści w jednej linii z pliku

Napisane przez plx211 w 23.11.2015 16:48

Można to rozwiązać na kilka sposobów :)

1) zamiast dodawać "klucz" (jak radzi snajper), można użyć wyrażeń regularnych (regexp)

to:

"jakies znaki" "jakies znaki"

uzyskasz przy pomocy takie wyrażenia (poniższe wyrażenie prawdopodobnie da się skrócić, nie ma się co go bać :), nie wychwytuje znaków specjalnych):

/\"[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+\"\s\"[0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+\"/

a następnie explodować " "

 

2) zmodyfikować zapis na:

WriteFileLine(fileHandle,"\"STEAM_ID:0:0:00000000\" \"X\"\n");

wczytywać po linij

a następnie explodować " "

 

3) przenieść zapis/odzczyt na keyvalues

dostaniesz wtedy wygodny interfejs

 

4) przenieść się na sql

dostaniesz wtedy wygodny interfejs (pod warunkiem że znasz sql)

najwydajniejsze rozwiązanie w przypadku dużej liczby danych

 

@edit

skrócony regex który pozwala na znaki specjalne:

/\"[^"]+\"\s\"[^"]+\"/

@edit2

możesz także wyłapać konkretne steamid tym:

/\"STEAM:0:0123456\"\s\"[^"]+\"/

lub zaczynające się od danego początku tym:

/\"STEAM:0:012+\"\s\"[^"]+\"/

  • +
  • -
  • 1


#714965 Błąd podczas kompilacji

Napisane przez plx211 w 21.11.2015 11:49

Cmod_GetINT
  • +
  • -
  • 1